有关使用矩形图像创建圆形UIImageView的问题

时间:2016-02-04 02:12:22

标签: ios objective-c uiimageview

现在我想创建一个圆形图像视图,当我对其应用不同形状(如矩形)的图像时,它仍然可以保持圆形。谷歌搜索后,我有以下代码:

self.avatarImageView = ({
    UIImageView *imageView = [UIImageView new];
    imageView.translatesAutoresizingMaskIntoConstraints = NO;
    imageView.image = [UIImage imageNamed:@"blueRoundRect"];
    imageView.alpha = 1.0;
    imageView;
});
[self.view addSubview:self.avatarImageView];

[self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make){
    make.top.equalTo(self.loginButton.mas_bottom);
    make.width.equalTo(@(2 * avatarImageViewRadius));
    make.height.equalTo(@(2 * avatarImageViewRadius));
    make.centerX.equalTo(self.view.mas_centerX);
}];
self.avatarImageView.layer.cornerRadius = avatarImageViewRadius;    //Create a circular avatar imageView.
self.avatarImageView.layer.masksToBounds = YES;

代码用viewDidLoad编写,如您所见,我在Masonry的帮助下进行自动布局。但是当我运行应用程序时,imageView仍然是矩形,但图像形状似乎从矩形变为圆角矩形(我使用的原始图像是一个矩形蓝色图像)。任何想法? The result from the view hierarchy debugger

如果我创建一个新类AvatarImageView并将以下代码放入其中:

- (instancetype)initWithImage:(UIImage *)image
{
    self = [super initWithImage:image];

    if (self)
    {
        self.translatesAutoresizingMaskIntoConstraints = NO;
        self.image = image;
    }

    return self;
}

- (void)layoutSubviews
{
    [super layoutSubviews];

    self.layer.cornerRadius = self.frame.size.width / 2;
    self.layer.masksToBounds = YES;
}

在视图控制器的viewDidLoad中,我写道:

self.avatarImageView = [[BBTAvatarImageView alloc] initWithImage:[UIImage imageNamed:@"blueRoundRect"]];
[self.view addSubview:self.avatarImageView];
[self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make){
    make.top.equalTo(self.loginButton.mas_bottom);
    make.width.equalTo(@(2 * avatarImageViewRadius));
    make.height.equalTo(@(2 * avatarImageViewRadius));
    make.centerX.equalTo(self.view.mas_centerX);
}];

但结果和以前一样。

2 个答案:

答案 0 :(得分:1)

你可以通过取一个正方形并对其应用圆角来获得一个圆,角半径等于边长的1/2。

你不能从圆角的矩形中获得椭圆形状,除非你可以将圆角变成非圆形,Apple不再支持它。你自己必须建立角落形状。

如果您尝试在viewDidLoad中设置圆形,则可能无法正常工作。在viewDidLoad中,您的视图控制器的视图未针对当前屏幕大小和旋转进行了调整大小/布局调整。您想在layoutSubviews中计算尺寸和拐角半径值。

答案 1 :(得分:0)

这可以帮助您制作圆形图像

self.imageView.layer.cornerRadius = self.imageView.frame.size.width / 2;
self.imageView.clipsToBounds = YES;
[self.imageView setImage:image];