2015-06-13 21 views
9

Vấn đề là di chuyển một "InfoView" (UIView) lập trình trong Swift.Cách di chuyển UIView theo lập trình trong Swift

Các khó khăn sau đây tồn tại trong kịch bản (xem hình):

enter image description here

Bây giờ, tôi muốn di chuyển các "cửa sổ InfoView" bên trong "MyView" lên hoặc xuống.

tôi đã cố gắng:

@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 

các Autolayout-hạn chế có thể đóng một vai trò. Làm thế nào để vượt qua những lập trình. Hoặc là phương pháp frame.origin.y sai?

Đánh giá cao sự trợ giúp về vấn đề này!

+0

Bạn cố gắng để tạo ra một hình ảnh động hoặc là bạn chỉ cần cố gắng để di chuyển vị trí của điểm w/o một chuỗi hoạt hình? – Jeffrey

+0

Không cần thiết cho hoạt ảnh! – iKK

Trả lời

18

Khi sử dụng các ràng buộc, bạn không bao giờ muốn đặt khung xem trực tiếp. Thay vào đó, hãy cấu hình lại các ràng buộc và để cho công cụ bố trí tự động đặt khung nhìn của bạn cho bạn. Tạo một IBOutlet trong bộ điều khiển khung nhìn của bạn để lưu trữ một tham chiếu đến "ràng buộc căn chỉnh trung tâm Y" của bạn. Đảm bảo bạn kết nối nó trong bảng phân cảnh hoặc xib.

@IBOutlet var yConstraint: NSLayoutConstraint 

Sau đó, bạn có thể đặt thuộc tính cố định của giới hạn để bù đắp vị trí Y (số dương sẽ di chuyển xuống, âm sẽ di chuyển lên).

yConstraint.constant = 200 

Điều này sẽ di chuyển chế độ xem của bạn xuống 200 điểm.

+0

Tuyệt vời! Cám ơn rất nhiều! –

9

Xem câu trả lời của tôi cho câu hỏi này khác về một cách tốt để lập trình di chuyển quan điểm sử dụng bố trí tự động: https://stackoverflow.com/a/30687856/3149796

Ngoài ra, tùy thuộc vào hiệu ứng bạn đang đi cho và yêu cầu khác của giao diện người dùng của bạn, bạn cũng có thể đạt được điều này với các biến đổi mà không làm phiền bố cục tự động của bạn.

// 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) 
Các vấn đề liên quan