2016-03-27 19 views
2

Ö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.

Animation with a button

Bu animasyon biraz daha net şeyler yapmak için bir UIView

Animation with a 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!

+0

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. –

+0

Lütfen animasyon kodunu ekleyebilir misiniz? Muhtemelen en önemli şey budur. – Sulthan

cevap

0

Daha fazla ayrıntı vermeden yapabildiğim tek şey, şahit olduğun davranışın, görüntülerden daha "elastik" olmanın düğmelere düştüğünü tahmin etmektir, çünkü bunların içeriği tarafından belirlenen "doğal" bir boyutu vardır (başlık) ve/veya resim) ve otomatik mizanpaj, bu doğal boyutu zorlamayı gerçekten seviyor (IB'nin uyarılarından görebileceğiniz gibi).

Daha fazla yardıma ihtiyacınız varsa, daha fazla ayrıntı vermelisiniz. Otomatik düzen kullanıyor musunuz? Hangi kısıtlamalar? Ne yapıyorsun? vb.

İlgili konular