现在我想创建一个圆形图像视图,当我对其应用不同形状(如矩形)的图像时,它仍然可以保持圆形。谷歌搜索后,我有以下代码:
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;
}
在视图控制器的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);
}];
但结果和以前一样。
答案 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];