现在我想创建一个圆形 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仍然是矩形,但图像形状似乎从矩形变为圆角矩形(我使用的原始图像是矩形蓝色图像)。有什么想法吗?
如果我创建一个新类 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/