2013-05-10 87 views
0

我正在用XIB文件设计界面生成器中的自定义视图控制器,并且我想添加到我的视图控制器中的自定义UIView子类。下面是我已经把我的自定义视图到视图控制器:XIV中的UIView子类不显示(drawRect:从未调用过)

interface builder

TonerEffectButtonView类是UIView一个子类(和无关与UIButton),这里是我的代码吧:

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 


-(void)prepareWithSelector:(SEL)selector onTarget:(id)targ withFilter:(GPUImageFilter*)filter{ 
    self.gpuImageView = [[GPUImageView alloc] initWithFrame:self.frame]; 
    UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:targ action:selector]; 
    [self addGestureRecognizer:gesture]; 
    selectedFilter = filter; 
    [filter addTarget:self.gpuImageView]; 
    [self setNeedsDisplay]; 
} 

- (void)drawRect:(CGRect)rect 
{ 
    [super drawRect:rect]; 

} 

initWithFrame:无论如何都不会叫,因为我通过XIB创建视图,我不需要任何initWithCoder:定制,所以我还没有实现它。我有一个GPUImageView(这是我正在使用的图书馆的一部分),我在我的视图中以编程方式创建,并添加相机输入(如果你问在准备方法中发生了什么)。准备方法从外部调用,并且我已经验证了我的UIView的框架在调用时是正确的。我有一个关于[super drawRect:rect];的断点,它永远不会被调用,并且当我运行该程序时,我的自定义视图不会显示,也不会接收触摸事件(但准备方法DOEST被调用,因此实例是使用正确的框架创建的) 。这就像它在界面构建器中从未放在那里一样。这可能是什么原因?我见过很多关于这个的帖子,他们大多是指编程创建视图并指出'initWithFrame:'的问题。但我没有办法与该方法,我想使用接口生成器/ XIB夫妇,请不要建议我以编程方式创建视图控制器。可能是什么原因呢?

谢谢,

可以。

UPDATE:我可以验证-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx也没有以任何方式被调用。

回答

0

好的,我找到了答案。首先,我尝试以编程方式添加另一个实例,并且我发现它的自动调整掩码设置为none,而我的原始实例将其设置为W + H。这个线索让我意识到,实际上,我忘记了将我的GPUImageView实例作为子视图添加到我的自定义视图中。我已经添加了它,它工作。