Tag: 核心graphics

为UIButton添加发光效果 – iOS

我有一个UIButton这是一个标志。 这个标志button将永远发光,但会停止发光touch.It就像一个发光的animation。 有什么build议吗? Undefined symbols for architecture i386: "_OBJC_CLASS_$_CABasicAnimation", referenced from: objc-class-ref in UIView+Glow.o "_OBJC_CLASS_$_CAMediaTimingFunction", referenced from: objc-class-ref in UIView+Glow.o "_kCAMediaTimingFunctionEaseInEaseOut", referenced from: -[UIView(Glow) startGlowing] in UIView+Glow.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)

iPhone SDK:你如何测量使用Quartz的string的宽度和高度?

在我问我的问题之前,这是从苹果的文档重新:如何确定使用Quartz的string的宽度: 如果文本测量对您的应用程序非常重要,则可以使用Quartz 2D函数来计算它们。 但是,您可能首先考虑使用ATSUI,其优势在于文本布局和测量。 ATSUI有几个function可以获取文本指标。 您不仅可以获得布局之后的文本指标,而且在极less数情况下,您可以获取布局之前的文本指标。 与Quartz不同,您必须自己执行计算,ATSUI将为您计算测量值。 例如,您可以通过调用ATSUI函数ATSUMeasureTextImage获取文本的图像边界矩形。 如果您认为Quartz文本比ATSUI(或Cocoa)更适合您的需求,您可以按照以下步骤在Quartz绘制之前测量文本的宽度: 调用函数CGContextGetTextPosition获取当前的文本位置。 使用函数CGContextSetTextDrawingMode将文本绘图模式设置为kCGTextInvisible。 通过调用函数CGContextShowText来绘制文本以在当前文本位置处绘制文本。 通过调用函数CGContextGetTextPosition来确定最终的文本位置。 从结束位置减去起始位置以确定文本的宽度。 这是我的问题: 这真的是使用Core Graphics来确定string宽度的最好方法吗? 这看起来很脆弱,因为我的文本与2Dgraphics元素共存,所以我想为所有渲染使用相同的上下文。 我希望能有一些简洁的方法,比如: CGContextGetTextWidthAndHeight(context,text); 我看到ATSUI已经过时了,将被核心文本取代。 这是真的,如果是的话,它在iPhone SDK吗?

用CGImageDestinationFinalize创build一个大的GIF – 内存不足

我正在尝试在创build包含大量帧的GIF时解决性能问题。 例如,一些GIF可能包含> 1200帧。 用我目前的代码,我的内存不足。 我想弄清楚如何解决这个问题。 这可以分批完成吗? 我的第一个想法是,如果有可能将图像附加在一起,但我不认为有这样的方法,或者如何由ImageIO框架创buildGIF。 这将是很好,如果有一个复数CGImageDestinationAddImages方法,但没有,所以我迷失在如何尝试解决这个问题。 我感谢提供的任何帮助。 对不起,冗长的代码,但我觉得有必要显示一步一步创build的GIF。 只要video中可能存在不同的GIF帧延迟,并且录制时间不会像每帧中所有animation的总和那样长,我就可以制作video文件而不是GIF。 注意:跳转到最新更新标题下面跳过背景。 更新1 – 6:使用GCD修复线程locking,但内存问题仍然存在。 100%的CPU利用率不在这里,因为我在工作执行时展示了一个UIActivityIndicatorView 。 使用drawViewHierarchyInRect方法可能比renderInContext方法更高效,但是我发现不能在afterScreenUpdates属性设置为YES的情况下在后台线程上使用drawViewHierarchyInRect方法; 它locking了线程。 必须有一些批量写出GIF的方法。 我相信我已经把内存问题缩小到: CGImageDestinationFinalize这个方法对于有很多帧的图像来说效率相当低,因为一切都必须在内存中写出整个图像。 我已经证实了这一点,因为我在抓取渲染的containerView图层图像和调用CGImageDestinationAddImage使用了很less的内存。 我打电话给CGImageDestinationFinalize的瞬间,记忆仪立刻CGImageDestinationFinalize起来; 有时根据帧数量最多为2GB。 所需的内存量似乎是疯狂的做一个〜20-1000KB的GIF。 更新2:有一种方法,我发现可能会承诺一些希望。 它是: CGImageDestinationCopyImageSource(CGImageDestinationRef idst, CGImageSourceRef isrc, CFDictionaryRef options,CFErrorRef* err) 我的新想法是,每10个或其他一些任意的帧,我会把它们写到一个目的地,然后在下一个循环中,先前完成的10帧的目的地将成为我的新源。 但是有一个问题。 阅读文档说明这一点: Losslessly copies the contents of the image source, 'isrc', to the * destination, 'idst'. The image data […]

CGRect语法我以前没见过

我在一些示例代码中看到了下面的语法,我不知道我是否理解它。 CGRect imageRect = (CGRect){.size = baseImage.size}; 这是简单的初始化一个CGRect等价于: CGRect imageRect = CGRectMake(0,0,baseImage.size.width, baseImage.size.height); 这种语法除了less打字以外,还有什么好处?

UIImage解压缩导致滚动滞后

我有这个应用程序与全屏幕tableView显示一堆小图像。 这些图像从networking中拉出,在后台线程上处理,然后使用如下所示的方式保存到磁盘: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ UIGraphicsBeginImageContextWithOptions(rect.size, YES, 0); // code that adds some glosses, shadows, etc UIImage *output = UIGraphicsGetImageFromCurrentImageContext(); NSData* cacheData = UIImagePNGRepresentation(output); [cacheData writeToFile:thumbPath atomically:YES]; dispatch_async(dispatch_get_main_queue(), ^{ self.image = output; // refreshes the cell using KVO }); }); 此代码仅在单元格显示的第一次执行(因为之后图像已经在磁盘上)。 在这种情况下,单元格使用以下方式加载: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ UIImage *savedImage = [UIImage imageWithContentsOfFile:thumbPath]; if(savedImage) { dispatch_async(dispatch_get_main_queue(), ^{ self.image […]

在iOS中的三维文字效果

我想在我的一个屏幕上渲染一些文字,看起来像是3DISH。 我正在使用UIKit和标准视图控制器等 效果看起来像这样: 这可以用UIKit和iOS以某种方式完成吗? 通常我只是使用一个静态PNG,然而,文本是dynamic的,并基于用户数据更新

为Corona SDK制作游戏graphics的可能方法是什么?

我一直在用Corona SDK开发一个简单的iPhone / Android游戏。 游戏本身不使用导入的graphics,只有规则的形状。 现在,我面临着为标题屏幕,结束屏幕和button制作graphics的问题。 我只需要知道一个可能的方法来做到这一点。 如果有人能帮上忙,那会很好。

CGLayerRef在NSValue – 什么时候调用retain()或release()?

我将一些graphicscaching到CGLayers上,然后使用@encode将它们存储在NSValue对象中(以便将它们存储在数组中)。 我只是想确保我正确处理保留/释放… 我cachinggraphics并将它们存储在数组中,如下所示: // Create an NSMutableArray "newCache" CGLayerRef drawingLayer = CGLayerCreateWithContext(context, bounds.size, NULL); CGContextRef drawingContext = CGLayerGetContext(drawingLayer); // Do some drawing… [newCache addObject:[NSValue valueWithBytes:&drawingLayer objCType:@encode(CGLayerRef)]]; CGLayerRelease(drawingLayer); // Is this release correct? 然后再检索图层: CGLayerRef retrievedLayer; [(NSValue *)[cacheArray objectAtIndex:index] getValue:&retrievedLayer]; // Use the layer… // Should I release retrievedLayer here? 我是否正确地认为图层在添加到数组之后需要释放(第一个代码片段中的最后一行)? 我认为这是因为我之前在代码中调用了一个创build函数。 NSValue然后跟踪我的图层数据? retrieveLayer是否需要在使用后手动释放? 谢谢

改变颜色空间和图像

我正在创build一个基于DeviceGray色彩空间的图像掩码。 基本上我想要做的是将各种灰色(黑色)像素变成白色,并保留黑色像素。 所以我希望我的图像与黑白像素一致。 任何想法如何实现,使用CoreGraphics意味着什么? 请不要提供循环中的所有像素运行

CAGradientLayer界限不变

我有一个CAGradientLayer被添加到UIVIew ,当我旋转设备的视图,它被添加到增加的大小(与自动布局),但CA层不会改变其大小。 我已经尝试实现viewDidLayoutSubviews方法,并在那里设置图层框架,但没有任何区别。 一旦设备旋转,如果我从视图导航,然后回到它,然后图层正确绘制。