【问题标题】: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 约束

标签: ios objective-c iphone nslayoutconstraint


【解决方案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 后调用的方法,那么把这段代码放在那个方法中
    猜你喜欢
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2014-02-07
    • 2011-10-13
    • 1970-01-01
    相关资源
    最近更新 更多