我已经对UIImageView进行了子类化,并试图覆盖drawRect,这样我就可以使用Quartz 2D在图像的顶部进行绘制.我知道这是一个愚蠢的新手问题,但我不知道我做错了什么.以下是界面:

#import <UIKit/UIKit.h>

@interface UIImageViewCustom : UIImageView {

}
- (void)drawRect:(CGRect)rect;
@end

以及实施:

#import "UIImageViewCustom.h"

@implementation UIImageViewCustom

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

- (void)drawRect:(CGRect)rect {
    // do stuff
}

- (void)dealloc {
    [super dealloc];
}
@end

我将断点设置为drawRect,但它从未命中,这让我觉得它从未被调用过.视图首次加载时不应该调用它吗?我是否错误地覆盖了它?

推荐答案

只有在视图可见且脏的情况下才会调用它.问题可能出在创建视图的代码中,或者在Nib中,如果您是这样创建视图的?

如果试图调试"发布"版本,有时还会看到断点无法正确设置.


不知怎的,我错过了你第一次将UIImageView子类化.从文件中:

特殊考虑

UIImageView类优化为

好了.考虑到使用[UIImage drawInRect:]或使用CALayer将图像绘制到视图中是多么容易,可能没有充分的理由将UIImageView子类化.

Objective-c相关问答推荐

为何在Objective-C中,使用self.propName赋值会导致崩溃而使用_ivarName则不会?

在 MacOS 上截屏

'if not' 的 Objective-C 预处理器指令

为什么我不应该在 init/dealloc 中使用 Objective C 2.0 访问器?

#if 和 #ifdef Objective-C 预处理器宏有什么区别?

NSInternalInconsistencyException: '无效参数不满足: !stayUp || CLClientIsBackgroundable(内部->fClient)'

判断用户是否在连续的 UISlider 上完成滑动?

iOS:使用设备修饰符加载 xib 文件?

iPhone - 什么是重用标识符(UITableViewCell)?

在Objective-C中替换字符串中的一个字符

在 Objective C 中使用 extern

Cocoa 与 Cocoa Touch - 有什么区别?

NSAssert vs assert :您使用哪个,何时使用?

如何像在 Spotify 的播放器中一样创建居中的 UICollectionView

如何判断数组是空还是空?

@dynamic 在 Objective-C 中做了什么?

字符串常量和字符串文字有什么区别?

所有异常断点在模拟器上无缘无故停止

即使在静音模式下也能在 iPhone 上播放声音

Objective-C:如何向 NSURL 添加查询参数?