[英]UIView subclass in XIB doesn't display (drawRect: never called)
我正在使用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];
}
無論如何,在通過XIB創建視圖時都不會調用initWithFrame:
:,並且initWithCoder:
不需要任何自定義設置,因此我尚未實現它。 我有一個GPUImageView
(它是我正在使用的庫的一部分),我正在視圖中以編程方式創建該視圖,並向其中添加攝像機輸入(如果您詢問prepare方法中會發生什么)。 Prepare方法是從外部調用的,並且我已經驗證了UIView的框架在調用時是正確的 。 我在[super drawRect:rect];
上有一個斷點[super drawRect:rect];
它不會被調用,當我運行該程序,則不會顯示我的自定義視圖,也沒有收到觸摸事件(但准備方法不會被調用所以實例與正確的幀創建)。 就像從未將其放置在界面生成器中一樣。 這可能是什么原因? 我已經看過很多關於此的文章,它們大多是指以編程方式創建視圖並指出“ initWithFrame:”的問題。 但是我與該方法無關,並且我想使用接口生成器/ XIB對,請不要建議我以編程方式創建視圖控制器。 可能是什么原因造成的?
謝謝,
能夠。
更新:我可以驗證也沒有以任何方式調用-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
。
好的,我找到了答案。 首先,我嘗試以編程方式添加另一個實例,發現它的自動調整大小掩碼設置為none,而我的原始實例將其設置為W + H。 這個線索使我意識到,實際上,我忘記了將GPUImageView
實例作為子視圖添加到自定義視圖中。 我添加了它,並且它起作用了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.