2012-05-13 44 views
5

Làm cách nào để thay đổi myLayer.contents bằng tập hợp hình ảnh (tức là chuyển đổi giữa img1 và img2) trong khi dịch? cảm ơn!thay đổi hình ảnh trong khi dịch

UIImage *myImage = [UIImage imageNamed:@"img1.png"]; 
CALayer *myLayer = [CALayer layer]; 
myLayer.contents = (id)myImage.CGImage; 
myLayer.Position = CGPointMake(0,0); 
myLayer.Bounds=CGRectMake(0.0, 0.0, 50, 50); 
[self.view.layer addSublayer:myLayer]; 

//translation1 
CGPoint startPt = CGPointMake(10,10); 
CGPoint endPt = CGPointMake(100,100);  
CABasicAnimation *transl1 = [CABasicAnimation animationWithKeyPath:@"position"]; 
transl1.removedOnCompletion = FALSE; 
transl1.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
transl1.fromValue = [NSValue valueWithCGPoint:startPt]; 
transl1.toValue = [NSValue valueWithCGPoint:endPt]; 
transl1.duration = 3; 
transl1.fillMode = kCAFillModeForwards; 
transl1.beginTime = 0; 
[myLayer addAnimation: transl1 forKey: nil]; 
+1

thực sự tôi nghĩ rằng anh ấy có nghĩa là dịch thuật, trong bản dịch toán học đang di chuyển một đối tượng đến một tọa độ khác nhau – MCKapur

Trả lời

2

Người đàn ông đi bộ ví dụ:

tôi đã xử lý chính xác cùng một công việc, nhưng tôi đã phải làm một con nhện chạy mà là 6 chân đi bộ và có 12 khung. Nó thực sự rất khó để làm và đã cho tôi vài tháng để hoàn hảo. Vấn đề là ví dụ về người thức dậy thường được thực hiện bằng cách thiết lập một loạt các khung ảnh (Chân đầu tiên, Chân cuối) thành thuộc tính animationImages của UIImageView. Sau đó, bạn bật và tắt hoạt ảnh cùng với nhân vật di chuyển sang phải và trái và bằng cách này tạo ra ảo ảnh về việc đi bộ. Bây giờ vấn đề lớn nảy sinh khi bạn muốn tạo ảo tưởng về gia tốc. Không có cách nào để thay đổi thời lượng hoạt ảnh DURING phát lại hoạt ảnh và đây là một trở ngại lớn mà rất khó khắc phục.

Đây là mã mà tôi sản xuất để khắc phục vấn đề này:

Ở đây bạn xác định một mảng với các khung chân đi bộ, khung hình mỗi bước.

animationImagesSpider = [NSArray arrayWithObjects: 
[UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], nil]; 

Ở đây bạn đính kèm mảng đến UIImageView:

imgViewSpider = [[UIImageView alloc] initWithFrame:CGRectMake(200,410,100,145)]; 
imgViewSpider.animationImages = animationImagesSpider; 

Bây giờ nếu bạn chỉ cần gọi [imgViewSpider startAnimating]; điều này sẽ bắt đầu hoạt ảnh ở tốc độ không đổi cho đến khi bạn dừng nó. Để khắc phục điều này tôi đã sử dụng một đệ quy mà đóng một phim hoạt hình ngắn cho mỗi bước và điều này cho phép điều chỉnh thời gian giữa mỗi bước sau:

- (void) spiderRun { 

    imgViewSpider.animationDuration= 0.51-(accSp/3.5); 
    [imgViewSpider setAnimationRepeatCount:222]; /// this is a dummy value that has no effect because animtion ends after the first frame 
    [imgViewSpider startAnimating]; 
    [self performSelector:@selector(spiderRun) withObject:nil afterDelay: 0.5-(accSp/3.5)]; 

} 

Bằng cách liên tục thay đổi giá trị accSp, tôi có thể kiểm soát tốc độ đi bộ trong đi bộ .

+0

cảm ơn bạn, tôi sẽ cố gắng! ciao, Giuseppe – Beppino66

0

Bạn sẽ cần tạo một hoạt ảnh 2 phiên bản 2, hoạt ảnh này sẽ làm cho hình ảnh được hoán đổi. Bạn sẽ cần đặt thời lượng thành một nửa thời lượng phiên dịch để nó sẽ rơi vào giữa hoạt ảnh dịch 1.

transl1.duration = 3

transl2.duration = 1,5

+0

cảm ơn bạn, nó là ok. Tôi cũng muốn chuyển trở lại img1, và sau đó trở lại img2 .... để mô phỏng một chuyển động ..... trong đó một phần của mã tôi có thể nói điều này? ciao – Beppino66

+0

Không rõ bằng cách chuyển đổi hình ảnh bạn kích thích chuyển động như thế nào. –

+0

Xin lỗi vì sự nhầm lẫn của tôi ...bây giờ tôi biết làm thế nào để di chuyển một lớp vào màn hình, với bản dịch, xoay vv ... vấn đề là nội dung của ayer là cùng một hình ảnh, và tôi muốn thay đổi nó trong quá trình hoạt hình (ví dụ như một người đàn ông đi bộ), vì vậy tôi cần phải lặp lại giữa một tập hợp các hình ảnh: img1, img2, img1, img2 .... trong khi dịch ... – Beppino66

1

Như các poster khác nói, tạo ra một hình ảnh động thứ hai mà sinh động nội dung tài sản của lớp đến một hình ảnh mới.

Tôi khuyên bạn nên đặt cả hai hoạt ảnh vào nhóm hoạt ảnh và thêm nhóm hoạt ảnh vào lớp. Sau đó, bạn có thể dễ dàng kiểm soát cả thời lượng và thời gian bắt đầu của cả hai hình động. Bạn có thể thực hiện trao đổi hình ảnh diễn ra trong một phần của tổng thời lượng, được định thời gian để diễn ra ở giữa hoạt ảnh.

Bạn sẽ đặt bắt đầu của hoạt ảnh bằng thuộc tính beginTime và thời lượng có thuộc tính thời lượng.

+0

cảm ơn rất nhiều Duncan! ciao – Beppino66

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