簡體   English   中英

XIB中的UIView子類不顯示(drawRect:從不調用)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM