如何在人像和风景中自动对图像进行舍入?

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

你应该不管这个方法执行了多少次。它会一直保持当时的正确结果。