我試圖做一個「記錄按鈕」這是一個UIView與我的應用程序的手勢識別器。目前我正在實現的功能是,當我點擊視圖時,我想縮小內圈(紅圈),但最終會出現意想不到的變形。我用UIView.animate功能來做到這一點,下面是我的代碼相關:Swift:UIView.animate意外地工作
import UIKit
@IBDesignable
class RecordView: UIView {
@IBInspectable
var borderColor: UIColor = UIColor.clear {
didSet {
self.layer.borderColor = borderColor.cgColor
}
}
@IBInspectable
var borderWidth: CGFloat = 20 {
didSet {
layer.borderWidth = borderWidth
}
}
@IBInspectable
var cornerRadius: CGFloat = 100 {
didSet {
layer.cornerRadius = cornerRadius
}
}
private var fillView = UIView()
private func setupFillView() {
let radius = (self.cornerRadius - self.borderWidth) * 0.95
fillView.frame = CGRect(origin: CGPoint.zero, size: CGSize(width: radius * 2, height: radius * 2))
fillView.center = CGPoint(x: self.bounds.midX, y: self.bounds.midY)
fillView.layer.cornerRadius = radius
fillView.backgroundColor = UIColor.red
self.addSubview(fillView)
}
override func layoutSubviews() {
super.layoutSubviews()
setupFillView()
}
func didClick() {
UIView.animate(withDuration: 1.0, animations: {
self.fillView.transform = CGAffineTransform(scaleX: 0.6, y: 0.6)
}) { (true) in
print()
}
}
}
在我的ViewController,我有:
@IBAction func recoreViewTapped(_ sender: UITapGestureRecognizer) {
recordView.didClick()
}
然而,這種效果達到: https://media.giphy.com/media/3ohjUQrWt7vfIxzBrG/giphy.gif。我是初學者,真的不知道我的代碼有什麼問題?
你未定義的行爲..您正在將視圖應用到視圖..但在佈局子視圖中,您正通過setupFillView函數修改其框架。您無法這樣做。轉換已經修改了視圖的框架。因此,當使用原始的BasicAnimation時,我們總是修改圖層而不是框架的邊界和位置。 接下來,您將在佈局子視圖中添加視圖..這將導致遞歸,因爲視圖將再次佈局.. – Brandon
@Brandon感謝您的回覆。我仍然感到困惑。我對這個主題沒有多少資源,只是從幾個教程彙編代碼。你能告訴我如何糾正它嗎? –