如何根据按钮的框架计算cornerRadius
属性以创建圆角。
我不想为每个按钮项重新定义每个时间角cornerRadius
。
我为UIButton
创建了扩展程序。
extension UIButton {
func setRoundedCorners(){
self.layer.cornerRadius = 10
self.layer.borderWidth = 1
}
}
我想知道每次使用此功能时动态计算cornerRadius
。
查找函数的主要问题是为不同的按钮大小计算.cornerRadius。以下示例将显示小的差异。
示例:
转角半径为10:
转角半径为15:
是否有可能找到能够计算出正确角度的函数?
答案 0 :(得分:2)
试用此代码:
btn1
,btn2
和btnarrival
为UIButton
个实例:
btn1.setCornerRadius()
btn2.setCornerRadius()
btnarrival.setCornerRadius()
extension UIButton {
func setCornerRadius() {
layer.cornerRadius = frame.size.height / 2.0
clipsToBounds = true
}
}
答案 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)
}
}
...这就是结果: