如何根据按钮框架正确计算cornerRadius

时间:2016-10-06 10:17:39

标签: ios swift uibutton swift3

如何根据按钮的框架计算cornerRadius属性以创建圆角。

我不想为每个按钮项重新定义每个时间角cornerRadius

我为UIButton创建了扩展程序。

extension UIButton {

    func setRoundedCorners(){
        self.layer.cornerRadius = 10
        self.layer.borderWidth = 1
    }

}

我想知道每次使用此功能时动态计算cornerRadius

查找函数的主要问题是为不同的按钮大小计算.cornerRadius。以下示例将显示小的差异。

示例:

转角半径为10:

enter image description here

转角半径为15:

enter image description here

是否有可能找到能够计算出正确角度的函数?

4 个答案:

答案 0 :(得分:2)

试用此代码:

btn1btn2btnarrivalUIButton个实例:

 btn1.setCornerRadius()
 btn2.setCornerRadius()
 btnarrival.setCornerRadius()


extension UIButton {
    func setCornerRadius() {
        layer.cornerRadius = frame.size.height / 2.0
        clipsToBounds = true
    }
}

Did u want button look like this then try this my code..

答案 1 :(得分:1)

  

获得灵活功能的主要思想是计算得当   基于框架的不同按钮的角半径

我认为这取决于你传递的内容:

extension UIButton {
    func setRoundedCorners(ratio: Double?) {
        if let r = ratio {
            self.layer.cornerRadius = self.frame.size.width*r // for specific corner ratio                            
        } else {

            // circle
            // i would put a condition, as width and height differ:
            if(self.frame.size.width == self.frame.size.height) {
                self.layer.cornerRadius = self.frame.size.width/2 // for circles
            } else {
                //
            }
        }
        self.layer.borderWidth = 1
    }
}

用法

let button = UIButton()
button.setRoundedCorners(ratio: 0.25) // shape with rounded corners
button.setRoundedCorners() // circle

答案 2 :(得分:1)

我一直在寻找相同的东西,发现自己是一个非常清晰易懂的解决方案。因为它是UIView的扩展,你不仅可以在按钮上使用它,还可以使用几个对象。

extension UIView{
    func cornerCalculation(r: CGFloat) {
        self.layer.cornerRadius = self.frame.height/2 * r
    }
}

然后只需致电:

button.cornerCalculation(r: 1)

r将是0(锐边)和1(完整圆边)之间的任何数字

答案 3 :(得分:1)

此扩展程序可以为您提供帮助-它根据其UIView属性为给定的frame实例计算并设置拐角半径:

extension UIView {
    /**
     Magically computes and sets an ideal corner radius.
     */
    public func magicallySetCornerRadius() {
        layer.cornerRadius = 0.188 * min(frame.width, frame.height)
        layer.masksToBounds = true
    }
}

这是我在“ ViewController.swift”文件中针对三种大小不同的UIButtons使用它的方式:

import UIKit

class ViewController: UIViewController {

    private func addButton(frame: CGRect, backgroundColor: UIColor) {
        let button = UIButton(frame: frame)
        button.backgroundColor = backgroundColor
        button.magicallySetCornerRadius()
        button.layer.borderColor = UIColor.black.cgColor
        button.layer.borderWidth = 1.0
        view.addSubview(button)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        addButton(frame: CGRect(x: 40.0, y: 100.0, width: 100.0, height: 300.0), backgroundColor: .blue)
        addButton(frame: CGRect(x: 160.0, y: 180.0, width: 100.0, height: 100.0), backgroundColor: .green)
        addButton(frame: CGRect(x: 160.0, y: 300.0, width: 180.0, height: 100.0), backgroundColor: .red)
        addButton(frame: CGRect(x: 40.0, y: 420.0, width: 300.0, height: 150.0), backgroundColor: .yellow)
    }

}

...这就是结果:

enter image description here