2012-02-23 34 views
15

Xin lỗi vì một câu hỏi lớn, câu hỏi thực tế là đậm ở dưới cùng, bây giờ là một số giải thích.Di chuyển động của UIScrollView bằng CoreAnimation

Tôi đang sử dụng CoreAnimation trong dự án của mình để tạo hoạt ảnh cho một số đối tượng chuyển động như thế này.

CABasicAnimation *moveAnimation;   
moveAnimation=[CABasicAnimation animationWithKeyPath:@"position"];  
moveAnimation.duration = 2.0;  
moveAnimation.repeatCount=1;   
moveAnimation.autoreverses=NO; 
moveAnimation.delegate = self; 
moveAnimation.fromValue = [NSValue valueWithCGPoint:[crawler.layer position]]; 
moveAnimation.fillMode = kCAFillModeForwards; 
moveAnimation.removedOnCompletion = NO; 
CGPoint p; 
moveAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)]; 
[crawler.layer addAnimation:moveAnimation forKey:@"moveAnimation"]; 

Và bây giờ tôi cần tạo hiệu ứng động của một số UIScrollView. Tôi không thể sử dụng phương thức setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated vì không thể tùy chỉnh thời lượng hoạt ảnh.

tôi có thể làm cho nó như thế này

CGContextRef context = UIGraphicsGetCurrentContext(); 
[UIView beginAnimations:nil context:context]; 
[UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
[UIView setAnimationDuration:2]; 
[UIView setAnimationDelegate:self]; 
scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x + 200, scrollView.contentOffset.y); 
[UIView commitAnimations]; 

nhưng nó không phải CoreAnimation, và sử dụng 2 loại khác nhau của các kỹ thuật hoạt hình trong một ứng dụng không phải là một thực hành tốt, tôi nghĩ.

Có cách nào để sử dụng CoreAnimation để tạo hiệu ứng cuộn nội dung UIScrollView cho điểm tùy chỉnh với thời lượng hoạt ảnh tùy chỉnh không? P.S. Xin lỗi vì tiếng Anh xấu.

Trả lời

5

Bạn nên đọc về các thuộc tính animatable, Programming iOS 5

Trên thực tế, khi bạn cố gắng để animate lớp, Apple đưa ra một tập hợp các thuộc tính animatable, nhưng bạn không giới hạn trong bộ này. Bạn có thể làm sống động bất cứ điều gì bạn muốn.

Trong mọi trường hợp, bạn không nên sử dụng kCAFillModeForwards vì nó sẽ yêu cầu thiết bị vẽ lại vĩnh viễn lớp bản trình bày cuối cùng được sử dụng cho hoạt ảnh thay vì sử dụng biểu diễn được lưu trong bộ nhớ cache của lớp.

Vì vậy, cách bạn có thể đạt được điều như vậy sẽ là xác định một lớp cụ thể của bạn trong đó thuộc tính contentOffset được định nghĩa là có thể hoạt hình. Và để làm việc, bạn nên bắt đầu bằng cách xác minh loại lớp trên cùng nào được sử dụng bởi scrollview, do đó, bằng cách phân lớp và đặt thuộc tính mong muốn (contentOffset) có thể hoạt hình và phân lớp cuộn của bạn bằng cách đặt lớp này làm đầu trang lớp của scrollview, bạn có thể có thể đạt được những gì bạn đang cố gắng để làm.

Đây là lý thuyết!

Nhưng đây là những gì tôi sẽ thử. Look cho phương pháp này và hành vi của nó và ý đồ

+ (BOOL)needsDisplayForKey:(NSString *)key 

Một điều bạn có thể đọc là A start example này. Nhưng điều này cũng có nghĩa là bạn nên vẽ lại uiscrollview của mình một mình!

+0

Cảm ơn rất nhiều. Đây là những gì tôi cần bây giờ. – Padavan

4

Tôi không nghĩ để bạn có thể tạo hiệu ứng điểm bằng CoreAnimation.

Nhưng bạn có thể thử setContentOffset:animated: là phương pháp bạn đang tìm kiếm?

Bạn có thể chuyển đổi chỉ tính chất của UIView

  • khung
  • vọt
  • trung tâm
  • chuyển
  • alpha
  • backgroundColor
  • contentStretch
  • sau

nhiều thông tin của CoreAnimation về hoạt hình thanh toán các Apple Documentation

+0

Cảm ơn câu trả lời, nhưng setContentOffset: hoạt ảnh: phương thức không thể định vị trong trường hợp của tôi, vì tôi cần đặt thời lượng hoạt ảnh. Và liên kết của bạn không dành cho CoreAnimation) https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Introduction/Introduction.html Đây là tài liệu về nó. – Padavan

26

Bạn có thể sử dụng:

[UIView animateWithDuration:duration animations:^ { 
    [scrollView setContentOffset:destination animated:NO]; 
}]; 

Bạn có thể thiết lập thời gian của hình ảnh động theo cách này.

+0

Có, tôi có thể, nhưng đây là hình động khối, không phải CoreAnimation, phải không? Tôi cần một cách để sử dụng CoreAnimation cho điều này bởi vì đã sử dụng nó trong dự án và không muốn sử dụng 2 kỹ thuật khác nhau. – Padavan

+0

Câu trả lời đơn giản tuyệt vời cho phần thời gian của câu hỏi. – PKCLsoft

+3

"hoạt ảnh khối" chỉ là một trình bao bọc xung quanh Hoạt ảnh chính chứ không phải là một công nghệ khác. bạn có thể trộn chúng một cách tự do. – skozin

7
[UIScrollViewNameHere setContentOffset:CGPointMake(x value of where you want to move to, y value of where you want to move to) animated:YES]; 

ví dụ:

UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(4, 2, 2341, 412)]; 
[scroll setContentOffset:CGPointMake(320, 0) animated:YES]; 
+0

Tôi không thể sử dụng phương thức hoạt hình setContentOffset: (CGPoint) động: (BOOL) vì không thể tùy chỉnh thời lượng hoạt ảnh. tôi viết nó trong câu hỏi, đọc nó chặt chẽ. – Padavan

Các vấn đề liên quan