2014-09-03 17 views
131

Tôi có một UITextField mà tôi muốn phóng to chiều rộng của nó khi khai thác trên. Tôi thiết lập các ràng buộc và đảm bảo ràng buộc ở bên trái có mức độ ưu tiên thấp hơn sau đó là ràng buộc mà tôi đang cố gắng tạo hiệu ứng ở bên phải.cố gắng tạo hiệu ứng một hạn chế trong swift

Đây là mã mà tôi đang cố gắng sử dụng.

// move the input box 
    UIView.animateWithDuration(10.5, animations: { 
     self.nameInputConstraint.constant = 8 
     }, completion: { 
      (value: Bool) in 
      println(">>> move const") 
    }) 

Công trình này có vẻ như chỉ xảy ra ngay lập tức và dường như không có bất kỳ chuyển động nào. Tôi đã cố gắng thiết lập 10 giây để đảm bảo rằng tôi không thiếu bất cứ điều gì, nhưng tôi đã có kết quả tương tự.

nameInputConstraint là tên của ràng buộc mà tôi kiểm soát được kéo để kết nối vào lớp của tôi từ IB.

Cảm ơn sự giúp đỡ của bạn trước!

+1

thể trùng lặp của [Làm thế nào để động thay đổi chế?] (Http://stackoverflow.com/questions/12622424/how-do-i-animate-constraint-changes) –

Trả lời

398

Trước tiên bạn cần thay đổi ràng buộc và sau đó tạo hoạt ảnh cho bản cập nhật.

self.nameInputConstraint.constant = 8 
UIView.animateWithDuration(0.5) { 
    self.view.layoutIfNeeded() 
} 

Và trong Swift 3.0:

UIView.animate(withDuration: 0.5) { 
    self.view.layoutIfNeeded() 
} 
+0

Có thể ai đó giải thích như thế nào/tại sao những công việc này? Gọi animationWithDuration trên bất kỳ UIView sẽ animate bất kỳ lớp nào thừa kế từ UIView và thay đổi một giá trị vật lý? – nipponese

+2

API hoạt ảnh mà bạn đề cập được sử dụng để tạo hoạt ảnh cho các thuộc tính * của chế độ xem và lớp. Ở đây chúng ta cần tạo hiệu ứng * thay đổi trong layout *. Đó là những gì thay đổi hằng số của một ràng buộc bố trí các cuộc gọi - thay đổi hằng số một mình không làm gì cả. – Mundi

+0

Cảm ơn @ryan, vì đã hoàn thành câu trả lời này với Swift 3.0. – Mundi

1

Trong trường hợp của tôi, tôi chỉ cập nhật giao diện tùy chỉnh.

// DO NOT LIKE THIS 
customView.layoutIfNeeded() // Change to view.layoutIfNeeded() 
UIView.animate(withDuration: 0.5) { 
    customViewConstraint.constant = 100.0 
    customView.layoutIfNeeded() // Change to view.layoutIfNeeded() 
} 
Các vấn đề liên quan