【发布时间】:2016-12-16 21:40:45
【问题描述】:
【问题讨论】:
标签: ios xcode uibutton storyboard
【问题讨论】:
标签: ios xcode uibutton storyboard
扩展是解决这个问题的最佳选择。创建视图或按钮的扩展
public extension UIView {
//Round the corners
func roundCorners(){
let radius = bounds.maxX / 16
layer.cornerRadius = radius
}
}
从代码中调用它
button.roundCorners()
【讨论】:
【讨论】:
clipsToBounds 才能工作。
我发现最简单的方法就是将cornerRadius设置为视图高度的一半。
button.layer.cornerRadius = button.bounds.size.height/2
【讨论】:
import UIKit
@IBDesignable class MyButton: UIButton
{
override func layoutSubviews() {
super.layoutSubviews()
}
func updateCornerRadius(radius:CGFloat) {
layer.cornerRadius = radius
}
@IBInspectable var cornerRadius:CGFloat = 0{
didSet{
updateCornerRadius(radius: cornerRadius)
}
}
}
【讨论】:
正如其他答案建议在代码中执行大部分工作一样,只有一个答案实际上提供了一种在情节提要 IB 界面中查看您的更改的方法。我的答案超越了那个答案,允许您更改视图、按钮、图像等的角半径。
请看下面的代码。要使用此代码,请创建一个名为 RoundedView 的新 swift 文件或任何您想要调用的文件,然后转到您的故事板并将类更改为“RoundedView”、“RoundedImageView”或“RoundedButton”。
import UIKit
@IBDesignable class RoundedImage: UIImageView
{
override func layoutSubviews() {
super.layoutSubviews()
updateCornerRadius()
}
@IBInspectable var rounded: Bool = false {
didSet {
updateCornerRadius()
}
}
@IBInspectable var cornerRadius: CGFloat = 0.1 {
didSet {
updateCornerRadius()
}
}
func updateCornerRadius() {
layer.cornerRadius = rounded ? cornerRadius : 0
layer.masksToBounds = rounded ? true : false
}
}
@IBDesignable class RoundedView: UIView
{
override func layoutSubviews() {
super.layoutSubviews()
updateCornerRadius()
}
@IBInspectable var rounded: Bool = false {
didSet {
updateCornerRadius()
}
}
@IBInspectable var cornerRadius: CGFloat = 0.1 {
didSet {
updateCornerRadius()
}
}
func updateCornerRadius() {
layer.cornerRadius = rounded ? cornerRadius : 0
layer.masksToBounds = rounded ? true : false
}
}
@IBDesignable class RoundedButton: UIButton
{
override func layoutSubviews() {
super.layoutSubviews()
updateCornerRadius()
}
@IBInspectable var rounded: Bool = false {
didSet {
updateCornerRadius()
}
}
@IBInspectable var cornerRadius: CGFloat = 0.1 {
didSet {
updateCornerRadius()
}
}
func updateCornerRadius() {
layer.cornerRadius = rounded ? cornerRadius : 0
layer.masksToBounds = rounded ? true : false
}
}
【讨论】:
在 RoundButton 类中插入代码。
import UIKit
@IBDesignable
class RoundButton: UIButton {
@IBInspectable var cornerRadius: CGFloat = 0{
didSet{
self.layer.cornerRadius = cornerRadius
}
}
@IBInspectable var borderWidth: CGFloat = 0{
didSet{
self.layer.borderWidth = borderWidth
}
}
@IBInspectable var borderColor: UIColor = UIColor.clear{
didSet{
self.layer.borderColor = borderColor.cgColor
}
}
}
参考图片。
【讨论】:
在情节提要中添加layer.cornerRadius 时,请确保您没有前导或尾随空格。如果你复制粘贴,你可能会插入空格。如果 XCode 能给出某种警告或错误,那就太好了。
【讨论】:
你可以这样做:
@IBDesignable class MyButton: UIButton
{
override func layoutSubviews() {
super.layoutSubviews()
updateCornerRadius()
}
@IBInspectable var rounded: Bool = false {
didSet {
updateCornerRadius()
}
}
func updateCornerRadius() {
layer.cornerRadius = rounded ? frame.size.height / 2 : 0
}
}
在Identity Inspector 中将类设置为MyButton,在IB 中您将拥有rounded 属性:
【讨论】:
layer.masksToBounds = true
您可以从情节提要中连接您的按钮的IBOutlet。
然后您可以设置按钮的corner radius 使其变为圆角。
例如,你的outlet 是myButton 那么,
Obj - C
self.myButton.layer.cornerRadius = 5.0 ;
斯威夫特
myButton.layer.cornerRadius = 5.0
如果您想要精确的圆形按钮,那么您的按钮的width 和height 必须是equal 和cornerRadius 必须等于高度或宽度/2(宽度或高度的一半)。
【讨论】:
试试这个!!
override func viewDidLoad() {
super.viewDidLoad()
var button = UIButton.buttonWithType(.Custom) as UIButton
button.frame = CGRectMake(160, 100, 200,40)
button.layer.cornerRadius =5.0
button.layer.borderColor = UIColor.redColor().CGColor
button.layer.borderWidth = 2.0
button.setImage(UIImage(named:"Placeholder.png"), forState: .Normal)
button.addTarget(self, action: "OnClickroundButton", forControlEvents: .TouchUpInside)
button.clipsToBounds = true
view.addSubview(button)
}
func OnClickroundButton() {
NSLog(@"roundButton Method Called");
}
【讨论】:
要在情节提要中执行此操作,您需要为按钮使用图像。
您也可以在代码中执行此操作:
btn.layer.cornerRadius = 10
btn.clipsToBounds = true
【讨论】: