2

我想像在 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 仅重绘 1 次。当我单击按钮时,NSLog 不会调用。更新活动指示器日志也不会调用。如何捕捉视图中不断变化的内容?有什么方法可以从 UIView 获取显示在屏幕上的图像/纹理,而无需在上下文中重绘此视图?

4

1 回答 1

0

您可以像这样请求UIView重绘(调用- (void)drawRect:(CGRect)rect):

[view setNeedsDisplay];

文档说:

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

或者你可以使用

view.contentMode = UIViewContentModeRedraw;

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

于 2013-06-12T07:16:47.800 回答