2012-06-11 37 views
11

Có cách nào để làm mọi thứ theo cách "ngắn gọn và dễ dàng" như dưới đây không? Đường cong dường như vẫn sử dụng EaseOut.ios UIView đường cong hoạt hình

[UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
[UIView animateWithDuration:0.5 animations:^{ 
    // ... do stuff here 
}]; 

Trả lời

25

Bạn đang trộn hai loại hoạt ảnh UIView khác nhau. Bạn nên sử dụng một cái gì đó như thế này hoặc trong số này:

[UIView animateWithDuration:0.5 
         delay:0.0 
        options:UIViewAnimationOptionCurveEaseIn 
       animations:^{ 
        // ... do stuff here 
       } completion:NULL]; 

Điều này xuất phát từ API hoạt ảnh UIView dựa trên khối mới hơn. Dòng đầu tiên, mặt khác, là một phần của UIView hoạt hình API cũ trông như thế này:

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
// ... do stuff here 
[UIView commitAnimations]; 

Họ làm điều tương tự và bạn có thể sử dụng một trong hai (mặc dù Apple khuyến cáo API khối dựa trên vì nó dễ dàng hơn/sạch hơn để thực hiện các cuộc gọi lại sau khi hoạt ảnh kết thúc).

2

Bạn có thể thực hiện việc đó bằng cách sử dụng Core Animation, CAKeyFrameAnimation để xác định các điểm đường cong. Xem hướng dẫn này: http://nachbaur.com/blog/core-animation-part-4

+4

Lưu ý rằng liên kết chỉ câu trả lời không được khuyến khích ở đây trên SO. Vui lòng xem xét [chỉnh sửa câu trả lời của bạn] (http://meta.stackexchange.com/a/8259/186599) và thêm bản tóm tắt tại đây. – NAZIK

+0

@NAZIK danh dự của bạn tôi ở đây để trả lời câu hỏi và tìm một giải pháp thích hợp để querry! – Steve

+0

Tôi đã trải qua hướng dẫn, lấy bài viết của tôi – NAZIK

0

Hãy lấy các điểm đường cong p1, p2, p3, p4 và p5, & tìm điểm giữa cho mỗi cặp điểm lân cận. Nhãn m1 là điểm giữa cho p1 và p2. Tương tự cho m2, m3, m4.

  • Thêm đường cong quad để trỏ m2 bằng p2 làm điểm kiểm soát.
  • Thêm đường cong quad đến điểm m3 với p3 làm điểm kiểm soát.
  • Thêm đường cong bốn để trỏ m4 bằng p4 làm điểm kiểm soát.

Code:

CGFloat screenHeight = self.view.frame.size.height; 
CGFloat screenWidth = self.view.frame.size.width; 

UIView *aniView = [[UIView alloc] initWithFrame:CGRectMake(50, screenHeight, 50, 50)]; 
[aniView setBackgroundColor:[UIColor redColor]]; 
aniView.layer.cornerRadius = 25.0; 
[self.view addSubview:aniView]; 


UIBezierPath *movePath = [UIBezierPath bezierPath]; 
[movePath moveToPoint:aniView.center]; 
[movePath addQuadCurveToPoint:CGPointMake(screenWidth-50,screenHeight-50) 
       controlPoint:CGPointMake(screenWidth/2,screenHeight-150)]; 
CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
moveAnim.path = movePath.CGPath; 
moveAnim.removedOnCompletion = YES; 
CAAnimationGroup *animGroup = [CAAnimationGroup animation]; 
animGroup.animations = [NSArray arrayWithObjects:moveAnim, nil]; 
animGroup.duration = 2.0; 

[CATransaction begin]; { 
    [CATransaction setCompletionBlock:^{ 
     [aniView.layer removeAllAnimations]; 
     [aniView removeFromSuperview]; 
    }]; 

    [aniView.layer addAnimation:animGroup forKey:nil]; 

} [CATransaction commit]; 

Sao chép qua trên mã vào một số phương pháp và thử gọi phương pháp này ...

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