如何在人像和风景中自动对图像进行舍入?
How to round an image automatically in Portrait and Landscape?
我有一个 100*100 的 UIImageView,我使用以下代码将其四舍五入:
imageView.layer.cornerRadius = imageView.frame.size.width/2
此 imageView 添加了一个约束,其宽高比与 superview 成比例。这是因为我需要随着超级视图大小的变化相应地更改 imageView 的大小。
问题:
当我在横向模式下旋转视图时,imageView 会调整大小但不会变圆。我已经为它添加了屏幕截图。
How/Where 是不是应该再四舍五入。我应该注册通知然后再次设置舍入吗?由于 imageView 大小已更改。有没有自动布局可以自行管理的东西。
请给个好的解决办法
编辑:
这里是imageView约束
在横屏模式下使用这个
[imageView layoutIfNeeded];
然后
imageView.layer.cornerRadius = imageView.frame.size.width/2
在你身上试试这个ViewController
- (void)layoutSubviews
{
[super layoutSubviews];
NSLog(@"%f", imageView.frame.size.width/2);
layer.cornerRadius = imageView.frame.size.width/2;
}
您可以在 didRotateFromInterfaceOrientation
方法中更新 imageView 的 cornerRadius
:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
imageView.layer.cornerRadius = imageView.bounds.size.width / 2;
}
如果视图控制器支持新方向,则仅当屏幕旋转到新方向时才会调用此方法。
或在 viewDidLayoutSubviews
中更新其 cornerRadius
:
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
imageView.layer.cornerRadius = imageView.bounds.size.width / 2;
}
你应该不管这个方法执行了多少次。它会一直保持当时的正确结果。
我有一个 100*100 的 UIImageView,我使用以下代码将其四舍五入:
imageView.layer.cornerRadius = imageView.frame.size.width/2
此 imageView 添加了一个约束,其宽高比与 superview 成比例。这是因为我需要随着超级视图大小的变化相应地更改 imageView 的大小。
问题: 当我在横向模式下旋转视图时,imageView 会调整大小但不会变圆。我已经为它添加了屏幕截图。
How/Where 是不是应该再四舍五入。我应该注册通知然后再次设置舍入吗?由于 imageView 大小已更改。有没有自动布局可以自行管理的东西。
请给个好的解决办法
编辑:
这里是imageView约束
在横屏模式下使用这个
[imageView layoutIfNeeded];
然后
imageView.layer.cornerRadius = imageView.frame.size.width/2
在你身上试试这个ViewController
- (void)layoutSubviews
{
[super layoutSubviews];
NSLog(@"%f", imageView.frame.size.width/2);
layer.cornerRadius = imageView.frame.size.width/2;
}
您可以在 didRotateFromInterfaceOrientation
方法中更新 imageView 的 cornerRadius
:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
imageView.layer.cornerRadius = imageView.bounds.size.width / 2;
}
如果视图控制器支持新方向,则仅当屏幕旋转到新方向时才会调用此方法。
或在 viewDidLayoutSubviews
中更新其 cornerRadius
:
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
imageView.layer.cornerRadius = imageView.bounds.size.width / 2;
}
你应该不管这个方法执行了多少次。它会一直保持当时的正确结果。