tôi đang áp dụng CABasicAnimation cho thuộc tính vị trí của một lớp đang hoạt ảnh tốt nhưng sau khi hoạt ảnh hoàn tất việc quay lại vị trí ban đầu như thế nào để tránh điều đó và làm cho hình ảnh ở trạng thái hoạt ảnh ?CABasicAnimation không thay đổi thuộc tính vị trí của nó sau khi hoạt ảnh hoàn thành
Trả lời
Có một vài cách khác nhau để giải quyết vấn đề này. Yêu thích của tôi là đặt đối tượng ở cuối hoạt ảnh và sử dụng từValue thay vì toValue để tạo hoạt ảnh. Bạn cũng có thể đặt cả hai từValue và toValue để tạo hiệu ứng này. tức là
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = 1.0;
animation.fromValue = [NSValue valueWithCGPoint:startPoint];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
viewToAnimate.center = endPoint;
[viewToAnimate.layer addAnimation:animation forKey:@"slide"];
Một cách khác để làm điều này là để thiết lập mình như các đại biểu và thực hiện:
Bạn cần phải thiết lập vị trí cuối cùng. Nếu bạn chỉ sử dụng hoạt ảnh từValue và toValue, nó sẽ quay trở lại điểm xuất phát ban đầu. Hoạt ảnh sử dụng bản sao của chế độ xem/lớp khi nó "phát" và sau đó hoạt ảnh sẽ hiển thị chế độ xem/lớp gốc khi nó kết thúc.
Nếu bạn không đặt nó rõ ràng, nó sẽ xuất hiện để chụp lại, mặc dù chế độ xem/lớp chưa bao giờ thực sự di chuyển.
startPoint và endPoint là CGPoints và myView là UIView đang hoạt ảnh.
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = .3;
animation.fromValue = [NSValue valueWithCGPoint:startPoint];
animation.toValue = [NSValue valueWithCGPoint:endPoint];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
[myView.layer addAnimation:animation forKey:@"position"];
myView.layer.position = endPoint; // Must set end position, otherwise it jumps back
Ngoài ra, đừng quên đặt ** loại bỏ ** Hoàn thành ** tài sản của hoạt ảnh thành ** NO ** 'hoạt hình.removedOnCompletion = NO;' – krpec
Nếu bạn xem tài liệu để thêmHình động: forKey :, thông báo 'Thông thường điều này được ngầm gọi'. Nói cách khác, bạn không nên gọi nó trực tiếp. Bạn đang thực sự có nghĩa là để làm những việc sau thay vào đó, mà thậm chí còn dễ dàng hơn thiết từ và đến các giá trị, bạn chỉ cần thiết lập các giá trị trực tiếp trên lớp:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
animation.duration = .3;
myLayer.actions = @{@"opacity": animation};
myLayer.opacity = 0;
này sẽ mờ dần một lớp để zero opacity.
Tôi không thấy điều đó trong tài liệu, có thể đó là một điều OSX chỉ có? Tôi đang xem CALayer [ở đây] (https://developer.apple.com/library/ios/documentation/graphicsimaging/reference/CALayer_class/Introduction/Introduction.html#//apple_ref/occ/instm/CALayer/addAnimation: forKey :). Hầu hết các hướng dẫn của Apple đều bao gồm lệnh gọi 'addAnimation: forKey:' ví dụ: [tại đây] (https://developer.apple.com/library/ios/documentation/cocoa/conceptual/coreanimation_guide/CreatingBasicAnimations/CreatingBasicAnimations.html). – bcattle
Để thiết lập các đối tượng ở phần cuối của các hình ảnh động chỉ cần viết code như thế này
#import <QuartzCore/QuartzCore.h>
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = 1.0;
animation.fromValue = [NSValue valueWithCGPoint:startPoint];
animation.timingFunction = [CAMediaTimingFunction functionWithName:easing];
animation.fillMode = kCAFillModeForwards; // This line will stop the animation at the end position of animation
animation.autoreverses = NO;
viewToAnimate.center = endPoint;
[viewToAnimate.layer addAnimation:animation forKey:@"slide"];
không hoạt động đối với tôi –
Bạn chỉ có thể thiết lập removedOnCompletion để NO nếu bạn muốn giữ giá trị cuối cùng. Và đừng quên đặt fillMode.
animation.fillMode = kCAFillModeForwards; //The receiver remains visible in its final state when the animation is completed.
animation.removedOnCompletion = NO;
- 1. Android: Đặt lại vị trí hoạt ảnh sau khi hoàn thành
- 2. Dừng CABasicAnimation từ khi bị xóa sau khi hoàn thành
- 3. Thay đổi vị trí xem sau khi kết thúc hoạt ảnh
- 4. Thuộc tính Hoạt ảnh CSS vẫn hoạt động sau khi hoạt ảnh
- 5. Lớp con CALayer không hoạt ảnh để thay đổi thuộc tính
- 6. AngularJS ngInclude động thay đổi vị trí của nó
- 7. Vị trí hoán đổi hoạt ảnh của hai nút
- 8. Thay đổi vị trí của thư mục thành phần
- 9. Android: Xoay hoạt hình trở lại trạng thái thực sau khi hoàn thành hoạt ảnh?
- 10. Tự động thay đổi vị trí của cửa sổ phụ thuộc vào vị trí hiển thị
- 11. thay đổi vị trí của UIImageView
- 12. Phát hiện hoàn thành Hoạt ảnh
- 13. Vùng chứa Google Maps không thay đổi kích thước chính xác sau khi hoạt ảnh
- 14. Thay đổi vị trí của TFS Build
- 15. CSS3 Vị trí hoạt ảnh
- 16. jQuery - hoạt hình 'trái' vị trí của div vị trí hoàn toàn khi bảng trượt được tiết lộ
- 17. Hoạt ảnh CSS3, dịch sang vị trí
- 18. Hoạt ảnh khi thay đổi bố cục
- 19. Cách xóa Thuộc tính trái khi vị trí: tuyệt đối?
- 20. thay đổi giới hạn tài sản của UIView không ảnh hưởng đến nội dung của nó
- 21. Điều chỉnh vị trí UIPopoverController sau khi đổi kích thước
- 22. hoạt ảnh jQuery Vị trí của jQuery Ui()
- 23. CALayer không vẽ nội dung của nó trong khi CABasicAnimation được sử dụng
- 24. thay đổi vị trí của phần tử css sau khi cuộn xuống trang
- 25. Thay đổi vị trí của UITableViewCellEditingStyle
- 26. Thay đổi vị trí của navigationItem.title
- 27. Thay đổi hoạt ảnh ẩn của ActionBar?
- 28. Cách thay đổi vị trí của grid.draw
- 29. không hoàn thành hoạt động khi chuyển ảnh của mảng byte được chụp bằng máy ảnh
- 30. Thay đổi vị trí tiêu đề PHP của khung chính
Tuyệt vời. nó hoạt động cho tôi, cảm ơn rất nhiều –
ở đây, giá trị của "nới lỏng" là gì ?. – sathiamoorthy
Tôi tin rằng nếu easing không được thiết lập nó preloads để Linear, nhưng nó phải được đơn giản để thêm nó vào nếu bạn đang tìm kiếm dễ dàng trong/dễ dàng ra hoặc dễ dàng vào/ra. –