抓住UIView内容重绘

时间:2013-06-12 06:00:38

标签: ios objective-c uiview calayer

我希望像在eBay应用中一样为UIView添加过滤器。我使用GPUImage框架。我创建了一个继承自UIView的类,并将UIButton和UIActivityIndi​​catorView添加到此视图中。我想抓住重绘时刻并为新图像/纹理应用滤镜。例如。当我点击按钮时,按钮变亮了。

@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获取屏幕上显示的图像/纹理而不在上下文中重绘这个视图?

1 个答案:

答案 0 :(得分:0)

您可以请求UIView重绘(调用- (void)drawRect:(CGRect)rect),如下所示:

[view setNeedsDisplay];

文档说:

  

您可以使用此方法或setNeedsDisplayInRect:来通知   系统需要重新绘制视图的内容。

或者您可以使用

view.contentMode = UIViewContentModeRedraw;
  

通过调用setNeedsDisplay方法在边界更改时重新显示视图。