我希望像在eBay应用中一样为UIView添加过滤器。我使用GPUImage框架。我创建了一个继承自UIView的类,并将UIButton和UIActivityIndicatorView添加到此视图中。我想抓住重绘时刻并为新图像/纹理应用滤镜。例如。当我点击按钮时,按钮变亮了。
@interface MyCALayer : CALayer
@end
@implementation MyCALayer
- (void)renderInContext:(CGContextRef)ctx
{
[super renderInContext:ctx];
NSLog(@"%@", @"CALayer redraw");
}
@end
@implementation MyView
+ (Class)layerClass
{
return [MyCALayer class];
}
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
NSLog(@"%@", @"UIView redraw");
}
@end
UIView和CALayer重绘一次。当我单击按钮时,NSLog不会调用。更新活动指示器日志也不会调用。如何在视图中捕获更改的内容?有没有办法从UIView获取屏幕上显示的图像/纹理而不在上下文中重绘这个视图?
答案 0 :(得分:0)
您可以请求UIView
重绘(调用- (void)drawRect:(CGRect)rect
),如下所示:
[view setNeedsDisplay];
文档说:
您可以使用此方法或setNeedsDisplayInRect:来通知 系统需要重新绘制视图的内容。
或者您可以使用
view.contentMode = UIViewContentModeRedraw;
通过调用setNeedsDisplay方法在边界更改时重新显示视图。