2015-06-13 31 views
9

Sorun, Swift'de "InfoView" (UIView) öğesini program aracılığıyla taşımaktır.UIView, Swift içinde programlı olarak nasıl taşınır

aşağıdaki kısıtlamalar (resme bakın) storyboard var:

enter image description here

Şimdi, "MyView" yukarı veya aşağı "InfoView" içinde hareket etmek istiyorum.

Denedim:
@IBOutlet weak var infoTextLabel: UILabel! 
@IBOutlet weak var infoTextLabelView: UIView! 

// set infoTextLabel color 
self.infoTextLabel.textColor = UIColor.blackColor() 
// set infoTextLabel text 
self.infoTextLabel.text = "hello" 
// unhide infoTextLabel 
self.infoTextLabel.hidden = false 

// For the moving in Y-direction, I tried this - but does not work !!!!!!! 
self.infoTextLabelView.frame.origin.y += 200 

autoLayout-kısıtlamaları bir rol oynayabilir olabilir. Bu programatik olarak üstesinden gelmek için nasıl. Veya frame.origin.y yöntemi yanlış olanı mı?

Bu konuda herhangi bir yardım için teşekkür ederiz!

+0

4 Bir animasyon oluşturmak için çalışıyorsunuz yoksa sadece bir animasyon dizisinin w/o görünümün konumunu taşımak için çalışıyoruz? – Jeffrey

+0

Animasyona gerek yok! – iKK

cevap

18

doğrudan bir görünümün çerçeveyi ayarlamak istemiyorum. Bunun yerine, kısıtlamaları yeniden yapılandırın ve otomatik düzen motorunun görünümünüzün çerçevesini sizin için ayarlamasına izin verin. "Merkezi Y Hizalama kısıtlamanıza" bir referans depolamak için görünüm denetleyicinizde bir IBOutlet oluşturun. Hikaye panosuna veya xib'e bağladığınızdan emin olun.

@IBOutlet var yConstraint: NSLayoutConstraint 

Sonra Y pozisyonu da ofset kısıt sabiti özelliğini ayarlayabilirsiniz (pozitif sayı, negatif hamle yukarı aşağı hareket edecektir).

yConstraint.constant = 200 

Bu, görünümünüzü 200 puan aşağıya taşırdı. Swift

+0

Harika! Çok teşekkürler! –

9

programlı otomatik düzenini kullanarak görüşlerini taşımak için iyi bir yol hakkında bu diğer soruya cevabım bakın: Eğer UI ve diğer gereksinimler için gidiyoruz etkisine bağlı olarak https://stackoverflow.com/a/30687856/3149796

Ayrıca, aynı zamanda başarmak olabilir Bu otomatik düzeninizi bozmadan dönüşümler ile. kısıtlamaları kullanırken

// Create a new transform 
self.infoTextLabelView.transform = CGAffineTransformMakeTranslation(0.0, 200.0) 

// Or modify existing transform 
self.infoTextLabelView.transform = CGAffineTransformTranslate(self.infoTextLabelView.transform, 0.0, 200.0 ) 
2

UIView.animateKeyframes(withDuration: 0.25, delay: 0.0, options: UIViewKeyframeAnimationOptions(rawValue: 7), animations: { 
     self.infoTextLabelView.frame.origin.y+=200 

},completion: nil)