UIView的吸气剂和二传手

时间:2014-01-16 16:01:26

标签: ios uiview uiimageview setter getter

在我的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上。

我忘了什么?

2 个答案:

答案 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中创建的那个。