2015-06-13 16 views
9

Problem polega na programowym przeniesieniu "InfoView" (UIView) do Swift.Jak programowo przenieść UIView w Swift

następujące ograniczenia istnieją w serii ujęć (patrz zdjęcie):

enter image description here

Teraz chciałbym przenieść „InfoView” wewnątrz „MyView” w górę lub w dół.

Próbowałem:

@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 

Czyżby autoLayout-ograniczenia odgrywać pewną rolę. Jak pokonać te programy. Czy metoda frame.origin.y jest niewłaściwa?

Doceń pomoc w tej sprawie!

+0

Czy przystąpieniem do tworzenia animacji lub jesteś po prostu staramy się przenieść pozycję widoku za w/o sekwencji animacji? – Jeffrey

+0

Nie ma potrzeby animacji! – iKK

Odpowiedz

18

Używając wiązań, nie chcesz bezpośrednio ustawiać ramki widoku. Zamiast tego przekonfiguruj wiązania i pozwól, aby mechanizm automatycznego układu ustawił dla ciebie ramkę widoku. Utwórz IBOutlet w kontrolerze widoku, aby zapisać odniesienie do "Ograniczenia osi Y względem środka". Upewnij się, że łączysz go w storybooku lub w XIB.

@IBOutlet var yConstraint: NSLayoutConstraint 

Następnie można ustawić stałą właściwość ograniczenie do przesunięcia go z pozycji Y (liczba dodatnia będzie przesunąć go w dół, negatywne przenosi go do góry).

yConstraint.constant = 200 

Spowoduje to przeniesienie widoku o 200 punktów w dół.

+0

Świetnie! Dzięki wielkie! –

9

Zobacz moją odpowiedź na to drugie pytanie o dobry sposób programowo przenieść widoki stosując układ Auto: https://stackoverflow.com/a/30687856/3149796

Ponadto, w zależności od efektu, który zamierzasz i innych wymagań dla swojego interfejsu, można również osiągnąć to z transformacjami bez zakłócania twojego automatycznego układu.

// 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

Swift 4

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

},completion: nil) 
Powiązane problemy