ios - 关于使用矩形图像创建圆形 UIImageView 的问题

标签 ios objective-c uiimageview

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

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;
}

在 View Controller 的 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);
}];

但是结果和以前一样。

最佳答案

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

你不能从带圆角的矩形得到椭圆形,除非你可以将角变成非圆形,Apple 不再支持它。您必须自己构建角形状。

如果您尝试在 viewDidLoad 中设置圆形,它可能不会起作用。在 viewDidLoad 中,您的 View Controller 的 View 尚未针对当前屏幕尺寸和旋转调整大小/布局。您想在布局 subview 中计算尺寸和圆角半径值。

关于ios - 关于使用矩形图像创建圆形 UIImageView 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35191262/

相关文章:

通过 uiviewcontroller 显示的自定义 View 的 iOS 旁白

ios - UITableView 数据源方法的奇怪行为

c++ - 在 iOS 中,如何从 viewController 以外的类更改按钮的文本?

iphone - 我们可以在 iPhone 中以编程方式打开/关闭 GPS 吗?

objective-c - 解除ModalViewController动画之谜

swift +UIImageView : switch between two animation frame sequences?

ios - 使 UIImageView 成为圆形,而不将其除以其自身的高度

ios - 在子类上设置参数而不初始化它?

objective-c - 透明度 iOS

ios - 如何使用 RGB 数据创建 CGImage?