drawRect中没有得到要求的UIImageView
我有一个UIImageView在我的IB和我创建的UIImageView的子类有一个方法的drawRect:drawRect中没有得到要求的UIImageView
@implementation UIImageViewLine
- (void)drawRect:(CGRect)rect
{
NSLog(@"CALLED");
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
CGContextSetLineWidth(context, 1.0f);
CGContextMoveToPoint(context, 0, 0);
CGContextAddLineToPoint(context, self.frame.size.width, self.frame.size.height);
CGContextStrokePath(context);
}
@end
我已经改变了类的UIImageView的这个子类,但是的drawRect永远不会被调用。任何想法为什么?
UIImageView
当子类别时不会调用drawRect
。
UIImageView类被优化以绘制其图像的显示。 UIImageView不会调用drawRect:一个子类。如果您的子类需要自定义绘图代码,建议您使用UIView作为基类。
只需通过正常UIView
更换UIImageView
和绘制图像和自定义图纸在UIView
的drawRect
方法或子层。
这就是为什么我喜欢这样,我想这只是救了我一个半小时 – 2013-06-25 14:41:40
除了sch的答案,值得注意的是如何UIImageView可以不同地使用UIView。
ImageView的方法是更改它的.image属性。这意味着图像缓存在视图堆栈上。如果图像每帧改变一次,那么这并不会给你太多。但如果没有,这是一个相当大的改进。在大多数游戏/应用程序中,大多数对象不会改变每一帧。
您可以通过调用底层CALayer来更改UIView的位置,旋转和不透明度。这只是对变换矩阵的一种改变,因此几乎没有时间处罚。
我强烈建议任何制作实时2D图形且不熟悉此参数的人阅读https://developer.apple.com/library/ios/qa/qa1708/_index.html,它更好地解释了参数并给出了示例代码。这非常简单。
将游戏对象包装在UIImageView中的想法似乎违反直觉,因为您不想将游戏逻辑与演示级别分开,并将它们绑定在一起。不过,根据苹果的建议刚刚改装成我的游戏原型,我得到双倍帧速率,所以我很愿意妥协我的建筑纯度。
为什么子类的UIImageView不UIView的? – 2012-02-22 23:56:40
舒服,所以我必须继承一个UIView而不是UIImageView的?如果我想在UIImageView上画一条线,该怎么办? – adit 2012-02-23 00:10:44
你可以借鉴的UIImage并使用的UIImageView显示图像 – 2012-02-23 01:27:03