2016-09-14 23 views
16

Kể từ khi nâng cấp dự án của tôi để nhanh chóng 3 hình ảnh động hạn chế autolayout của tôi không hoạt động; cụ thể hơn, họ đang chụp ở vị trí mới thay vì hoạt ảnh.Swift 3 UIView hoạt hình

UIView.animate(withDuration: 0.1, 
       delay: 0.1, 
       options: UIViewAnimationOptions.curveEaseIn, 
       animations: {() -> Void in 
        constraint.constant = ButtonAnimationValues.YPosition.DefaultOut() 
        self.layoutIfNeeded() 
    }, completion: { (finished) -> Void in 
    // .... 
}) 

Tôi biết họ đã thêm lớp UIViewPropertyAnimator nhưng chưa thử.

+1

Tôi đã tìm kiếm giải pháp về vấn đề này gần đây. Nhiều người có cùng một vấn đề, và tôi không thể làm cho nó hoạt động ngay cả với UIViewPropertyAnimator mới. Có thể đó là một lỗi chưa được giải quyết trong iOS 10. – diegotrevisan

+0

Bạn đã thử đặt hằng số trước cuộc gọi animate chưa? – lkraider

+0

@lkraider Đã thử rồi. –

Trả lời

21

Tôi có vấn đề này quá với bản cập nhật mới nhất để nhanh chóng 3.

Để được chính xác, bất cứ khi nào bạn muốn animate xem, bạn thực sự gọi layoutIfNeeded trên SuperView của quan điểm đó.

Hãy thử điều này thay vì:

UIView.animate(withDuration: 0.1, 
      delay: 0.1, 
      options: UIViewAnimationOptions.curveEaseIn, 
      animations: {() -> Void in 
       constraint.constant = ButtonAnimationValues.YPosition.DefaultOut() 
       self.superview?.layoutIfNeeded() 
}, completion: { (finished) -> Void in 
// .... 
}) 

Dường như trong quá khứ họ đã khoan dung về việc có thể chỉ relayout độ xem bạn muốn để animate. Nhưng nó trong tài liệu mà bạn nên thực sự được gọi layoutIfNeeded trong superview.

+0

Vị trí đang thay đổi nhưng không hoạt động. – Satyam

+3

Vui lòng thử mã này, công việc của nó cho tôi. UIView.animate (withDuration: 1, chậm trễ: 0, tùy chọn: .curveEaseInOut, hình động: { self.bottomViewTopConstraint.constant = 0,0 self.bottomView.superview .layoutIfNeeded() ?}, Hoàn thành: nil) – jbchitaliya

+0

Wow cảm ơn. Great fix, và một vấn đề lạ. – Siriss

7

Nâng cấp lên nhanh chóng 3,0

Xem quyền hình ảnh động trái như hình ảnh động push mặc định táo

//intially set x = SCREEN_WIDTH 
view.frame = CGRect(x: ScreenSize.SCREEN_WIDTH, y: ScreenSize.SCREEN_HEIGHT - heightTabBar , width: ScreenSize.SCREEN_WIDTH, height: heightTabBar) 

UIView.animate(withDuration: 0.50, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0, options: [], animations: { 
//Set x position what ever you want 
         view.frame = CGRect(x: 0, y: ScreenSize.SCREEN_HEIGHT - heightTabBar , width: ScreenSize.SCREEN_WIDTH, height: heightTabBar) 

        }, completion: nil) 
5

Đầu tiên thiết lập các giá trị mới cho hạn chế của bạn và sau đó gọi Animate.

self.YOUR_CONSTRAINT.constant = NEW_VALUE 
UIView.animate(withDuration: 1.0) { 
    self.view.layoutIfNeeded() 
} 
0

Swift 3.1, Xcode 8.3.2

Mã này hoạt động tốt đối với tôi. Mọi thay đổi trên chế độ xem của bạn sẽ hoạt ảnh trong chuyển động chậm.

UIView.animate(withDuration: 3.0, animations: { // 3.0 are the seconds 

// Write your code here for e.g. Increasing any Subviews height. 

self.view.layoutIfNeeded() 

})