如何在纵向和横向中自动舍入图像?

Posted

技术标签:

【中文标题】如何在纵向和横向中自动舍入图像?【英文标题】:How to round an image automatically in Portrait and Landscape? 【发布时间】:2015-07-07 10:47:05 【问题描述】:

我有一个 100*100 的 UIImageView,我使用下面的代码将其四舍五入:

imageView.layer.cornerRadius = imageView.frame.size.width/2

这个 imageView 添加了一个与 superview 纵横比的约束。这是因为我需要随着 superview 大小的变化而相应地更改 imageView 大小。

问题: 当我在横向模式下旋转视图时,imageView 会调整大小,但不会四舍五入。我已经为它添加了截图。

我应该如何/在哪里使它再次四舍五入。我是否应该注册通知,然后再次设置舍入。由于 imageView 的大小发生了变化。有什么东西是自动布局可以自己管理的。

请给出一个好的解决方案。

编辑:

这是 imageView 约束

【问题讨论】:

你能说出你的imageView的约束吗 添加了 imageView 约束 【参考方案1】:

您可以在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;

无论方法执行多少次,您都应该这样做。它将始终保持当时的正确结果。

【讨论】:

【参考方案2】:

在你的 ViewController 中试试这个

 - (void)layoutSubviews
 
    [super layoutSubviews];

    NSLog(@"%f", imageView.frame.size.width/2);

    layer.cornerRadius = imageView.frame.size.width/2;
 

【讨论】:

我应该在 UIImageView 子类还是 UIViewController 中实现这个? 答案已编辑;) 对,另一种方法是在- (void)viewDidLayoutSubviews中尝试相同的代码【参考方案3】:

横向模式使用这个

[imageView layoutIfNeeded];

然后

imageView.layer.cornerRadius = imageView.frame.size.width/2

【讨论】:

这两行应该写在哪里?用什么方法? [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationdidChange:) name:UIDeviceOrientationDidChangeNotification object:nil]; orientationdidChange 方法然后把这段代码放到这个方法中 有没有其他方法不实现通知。自动布局不会自动更新吗? 如果你有任何在旋转你的 iPhone 后调用的方法,那么把这段代码放在那个方法中

以上是关于如何在纵向和横向中自动舍入图像?的主要内容,如果未能解决你的问题,请参考以下文章

具有纵向和横向图像视图的自动布局

如何在轮播中使横向和纵向图像完全响应且高度相同?

如何从纵向模式自动旋转到横向模式?

Android:如何在设置图像视图时检测从图库中选择的图像方向(纵向或横向)?

如何在 jquery 移动 Web 应用程序中为纵向和横向屏幕方向设置相同的图像大小?

如何在保持纵横比且不切断图像数据的情况下跨横向和纵向显示图像