在我的UIView
子类中.h:
@interface MyView : UIView
@property (nonatomic, strong) UIImageView *imageView;
@end
我在我的UIImageView
子类上设置UIView
,如下所示init
方法:
self.imageView = [[UIImageView alloc]initWithFrame:CGRectMake(5, 0, 34, 34)];
self.imageView.layer.cornerRadius = CGRectGetWidth(imageView.frame) / 2.0f;
self.imageView.layer.masksToBounds = YES;
self.imageView.backgroundColor = [UIColor someColor];
[self addSubview: self.imageView];
因此,我可以执行myView.imageView.image = [UIImage someImage]
并正确设置UIImageView
上的图像。尝试清理UIView
子类上的代码时出现问题。
我正在尝试这样做:
- (UIImageView *)imageView {
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(5, 0, 34, 34)];
imageView.layer.cornerRadius = CGRectGetWidth(profilePhotoImageView.frame) / 2.0f;
imageView.layer.masksToBounds = YES;
imageView.backgroundColor = [UIColor redColor];
return imageView;
}
然后从init
方法执行
[self addSubView: [self imageView]];
但是当我{I} myView.imageView.image = [UIImage someImage]
时,图像不会显示在UIImageView上。
我忘了什么?
答案 0 :(得分:1)
确保您的imageView
getter方法已将UIImageView
实例存储在实例变量_imageView
中。否则,每次调用imageView
方法时,都会创建UIImageView
的新实例,因此您不会在实际添加到视图中的实例上设置图像。
因此,以下是imageView
方法的外观:
- (UIImageView *) imageView {
UIImageView *imageView = _imageView;
imageView.layer.cornerRadius = CGRectGetWidth(profilePhotoImageView.frame) / 2.0f;
imageView.layer.masksToBounds = YES;
imageView.backgroundColor = [UIColor redColor];
return imageView;
}
答案 1 :(得分:0)
当您为方法imageView命名时,它会覆盖您的属性的getter。因此,每次调用它时,您都会调用该方法并创建一个新的UIImageView。
IE,
myView.imageView
和
[myView imageView]
都调用你定义的方法,它返回一个新的UIImageView,而不是你在init中创建的那个。