我正在使用 XIB 文件在界面构建器中设计自定义视图控制器,并且我有一个自定义 UIView 子类,我想将其添加到我的视图控制器中。这是我将自定义视图放入视图控制器的方式:
我的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
(这是我正在使用的库的一部分),我正在我的视图中以编程方式创建它,并向它添加相机输入(如果你问准备方法中发生了什么)。Prepare 方法是从外部调用的,并且我已经验证了我的 UIView 的框架在调用时是正确的。我有一个断点[super drawRect:rect];
,它永远不会被调用,当我运行程序时,我的自定义视图不显示,也不接收触摸事件(但准备方法确实被调用,以便使用正确的帧创建实例)。就好像它从未放在界面生成器中一样。这可能是什么原因?我看过很多关于这个的帖子,它们主要是指以编程方式创建视图并指出“initWithFrame:”的问题。但我与该方法无关,我想使用界面生成器/XIB 对,请不要建议我以编程方式创建视图控制器。可能是什么原因造成的?
谢谢,
能。
更新:我可以验证-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
也没有以任何方式调用。