Özel tablo görüntüleme hücremde, animasyonlu 4 düğüme sahibim (aşağıda gösterilmektedir). Sorun şu ki, bir UIButton
kullanıyorum, animasyon istediğim gibi animasyon yapmıyor. Ama ben bir UIView
kullandığımda, tam olarak istediğim gibi çalışır.UIView ve UIButton arasındaki animasyon farkı
Kod, yalnızca farklı türde bir UIView
kullanma farkıyla aynıdır.
Bu animasyon biraz daha net şeyler yapmak için bir UIView
kullanıyor, tek şey:
Bu animasyon bir UIButton
kullanıyor Kodu değiştirdim:
// Test with Buttons
let button1 = Button() // Subclass of UIButton
let button2 = Button()
// Test with UIViews
let button1 = UIView()
let button2 = UIView()
Soru: UIButton
farklı normal UIView
kıyasla davranır neden
birisi bana söyleyebilir misiniz?
Başlangıçta ben) eleman UIView
veya UIButton
olma (her iki test "eleman" hariç tam olarak aynı kod (kullandığınız olarak okumak için bir soru daha kolay yapabilir kodu gönderme vermeyerek düşündü ve düşünce . belki sorun bu benim hata olduğunu şimdi fark "elemanları" arasındaki fark yatıyor
Kodum:.
class CustomView: UIView {
private var base: [NSLayoutConstraint] = []
private var open: [NSLayoutConstraint] = []
var buttons: [UIView] = []
private var active = false
override init(frame: CGRect) {
super.init(frame: frame)
let button1 = CustomButton(frame: CGRectZero, color: UIColor.yellowColor().CGColor)
let button2 = CustomButton(frame: CGRectZero, color: UIColor.redColor().CGColor)
// let button1 = UIView(); button1.backgroundColor = UIColor.yellowColor()
// let button2 = UIView(); button2.backgroundColor = UIColor.redColor()
let views = ["button1": button1, "button2": button2]
buttons = [button1, button2]
buttons.enumerate().forEach {
$0.element.translatesAutoresizingMaskIntoConstraints = false
addSubview($0.element)
addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[button\($0.index + 1)]|", options: [], metrics: nil, views: views))
base += [NSLayoutConstraint(item: $0.element, attribute: .Width , relatedBy: .Equal, toItem: buttons.first!, attribute: .Width , multiplier: 1, constant: 0)]
}
open += [NSLayoutConstraint(item: buttons.last!, attribute: .Width, relatedBy: .Equal, toItem: buttons.first!, attribute: .Width, multiplier: 0.33, constant: 0)]
addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[button1]-0.5-[button2]|", options: [], metrics: nil, views: views))
addConstraints(base)
backgroundColor = .blackColor()
clipsToBounds = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func changeState() {
removeConstraints(active ? open : base); addConstraints(active ? base : open)
active = !active
UIView.animateWithDuration(0.5, animations: { self.layoutIfNeeded() })
}
}
Çözüm:
Kodu yayınladıktan ve düğmelerin arka plan rengini yanlışlıkla değiştirdikten sonra, bunun uygun şekilde çalıştığını fark ettim. Bu, ilk animasyonda görülen davranışa neden olan düğmelerde CAShapeLayer
kullandığını fark etmemi sağladı. Şimdi ne düzelteceğimi biliyorum. Bu yayının kapatılması veya silinmesi gerekiyorsa lütfen bana bildirin. Sonra cevabı sileceğim. Ve yardım etmeye çalışanlar için teşekkürler!
Bana neden oy kullanmadığını söyler misiniz? Onu canlandırmak için kod eklemeyi umursamıyorum, ama bir UIView için çalıştığını görüyorum, sadece yazıyı gereksiz yere daha uzun sürebilir diye düşünüyorum. –
Lütfen animasyon kodunu ekleyebilir misiniz? Muhtemelen en önemli şey budur. – Sulthan