Swift: закругленные кнопки - PullRequest
       41

Swift: закругленные кнопки

0 голосов
/ 19 апреля 2019

Я следую следующему уроку о том, как округлить стороны кнопок:

https://blog.supereasyapps.com/how-to-create-round-buttons-using-ibdesignable-on-ios-11/

Я создал новый файл кода Swift, как он предложил, и ввел следующий код:

import Foundation
import UIKit

@IBDesignable class RoundButton: UIButton {

    override init(frame: CGRect) {
        super.init(frame: frame)
        sharedInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        sharedInit()
    }

    override func prepareForInterfaceBuilder() {
        sharedInit()
    }

    func sharedInit() {
        refreshCorners(value: cornerRadius)
    }

    func refreshCorners(value: CGFloat) {
        layer.cornerRadius = value
    }

    var cornerRadius: CGFloat = 15 {
        didSet {
            refreshCorners(value: cornerRadius)
        }
    }

}

Я не могу найти параметр «Угловой радиус» в «Инспекторе идентификации», как показано на анимации на веб-сайте для создания кнопок округления. Может кто-нибудь сказать, пожалуйста, что я сделал не так? Очень ценю помощь

Ответы [ 3 ]

1 голос
/ 19 апреля 2019

Вам необходимо изменить cornerRadius на следующее, чтобы включить @IBInspectable:

@IBInspectable
var cornerRadius: CGFloat = 15 {
    didSet {
        refreshCorners(value: cornerRadius)
        layer.masksToBounds = true     // Could include this
    }
}

@IBInspectable позволяет получить доступ к свойству в раскадровках, построителе интерфейса.

Вы также можете включить layer.masksToBounds = true, поэтому углы обязательно закругляются, даже если masksToBounds в раскадровке не отмечен.Однако вы не можете одновременно применять закругленные углы и тень, но есть много доступных обходных путей.

0 голосов
/ 19 апреля 2019

Вы пропустили добавление cornerRadius var:

@IBDesignable class RoundButton: UIButton {

  @IBInspectable var cornerRadius: CGFloat = 15 { didSet { refreshCorners(value: cornerRadius) } }

   override func awakeFromNib() {
        super.awakeFromNib()
        setupView()
    }

   .
   .
   .
   .
}
0 голосов
/ 19 апреля 2019

Это мое универсальное расширение для UIView. Вы можете переместить его только на UIButton. Таким образом, вы можете использовать 2 метода из интерфейса, чтобы сделать закругленные углы.

@IBDesignable extension UIView {
    @IBInspectable var roundRadius : CGFloat {
        set {
            self.layer.cornerRadius = newValue
        }
        get {
            return self.roundRadius
        }
    }

    /// automatically set cornerRadius as half of height
    @IBInspectable var isRounded : Bool {
        set {
            let radius = newValue ? self.frame.height/2 : 0
            self.layer.cornerRadius = radius
        }
        get {
            return self.isRounded
        }
    }
}
...