动态拐角半径用于风景和人像

时间:2018-08-02 11:27:10

标签: ios swift uiview cornerradius

我使用@IBInspectable创建UIView Extension来设置拐角半径,但是当我旋转设备时

import UIKit
import Foundation

extension UIView {

@IBInspectable
var cornerRadius: CGFloat {
     get {
        return layer.cornerRadius
     }
     set {
        layer.cornerRadius = newValue
     }
   }
}

我在以下约束下拍摄了图像视图 enter image description here

当我以纵向模式运行应用程序时,输出为 enter image description here

但是当我旋转设备时它不起作用 enter image description here

4 个答案:

答案 0 :(得分:2)

通过layoutSubviews方法设置拐角半径。

如果您需要圆形的视图,请将拐角半径设置为宽度/高度的一半。

view.layer.cornerRadius = view.frame.width / 2.0

答案 1 :(得分:1)

旋转时,视图的大小正在改变,并且以前应用的cornerRadius太大。您必须在layoutSubviews中更新拐角半径。试试这个小课程:

open class CircularView: UIView {
    @IBInspectable open var hasSquareCornerRadius: Bool = false {
        didSet {
            update()
        }
    }

    @IBInspectable open var cornerRadius: CGFloat = 0 {
        didSet {
            update()
        }
    }

    public var normalizedCornerRadius: CGFloat {
        return hasSquareCornerRadius ? bounds.height / 2 : cornerRadius
    }

    fileprivate func update() {
        layer.cornerRadius = cornerRadius
    }

    override open func layoutSubviews() {
        super.layoutSubviews()
        update()
    }
}

在接口构建器中将此类设置为您的视图。如果您的视图是正方形,请在界面构建器中将hasSquareCornerRadius设置为true。

答案 2 :(得分:1)

我可以在您的屏幕中看到,您提供了固定的拐角半径

enter image description here

还通过乘数提供相等的宽度或高度给超级视图,以便在旋转UIView的尺寸时得到此结果。

您需要在self.layoutSubviews()方法中更改方向时重置视图的角半径。

答案 3 :(得分:0)

您还可以通过编程方式检查设备是水平还是垂直,然后像Lal Krishna所说的那样更改转角半径

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

if ( ([[UIDevice currentDevice] orientation] ==  UIDeviceOrientationPortrait) )
{
view.layer.cornerRadius = view.frame.width / 2.0
}
else if(([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) || ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeLeft))
{
view.layer.cornerRadius = view.frame.width / 2.0
}