2012-03-08 26 views
9

Tôi mới đến mục tiêu-c và tôi muốn thêm hình ảnh vào màn hình, xoay nó giống như trong AS3, di chuyển từ đầu này sang đầu kia của màn hình trong khi xoay quanh điểm trung tâm của chính nó.Animate Rotation/Scale/Dịch của UIImage cùng một lúc

Tôi đã thử với

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ 
      // TRANSFORM SCREENSHOT 
      screenShotView.transform = CGAffineTransformRotate(screenShotView.transform, -M_PI * 0.05); 
      screenShotView.transform = CGAffineTransformScale(screenShotView.transform, 0.6, 0.6); 
      screenShotView.transform = CGAffineTransformTranslate(screenShotView.transform, 
                    self.webView.frame.origin.x, 
                    self.webView.frame.origin.y - self.webView.frame.size.height * 0.3 
             ); 

nhưng với mã này hình ảnh quay xung quanh trung tâm của TransformIdentity. Vì vậy, trong khi quay và di chuyển vòng quay ra khỏi tầm kiểm soát và hình ảnh không chính xác ở vị trí tôi yêu thích.

Cách xoay và dịch phù hợp cùng lúc, dịch trung tâm xoay với hình ảnh là gì?

và ít nhất sau khi chuyển đổi, tôi muốn thêm nút đóng vào góc trên bên phải của hình ảnh. vì tôi cũng cần tọa độ mới của góc.

thnx!

+0

có thể đáng để kiểm tra điều này ra http://www.apeth.com/iOSBook/ch17.html –

+0

Nó không rõ ràng đối với tôi ... Vấn đề là sự chuyển đổi? Hoặc bạn chỉ muốn tọa độ của góc trên bên phải sau khi biến đổi? – Saphrosit

+0

xin lỗi nếu tôi không đủ rõ ràng. vấn đề là xoay không phải là xung quanh trung tâm của hình ảnh. trung tâm xoay dường như không di chuyển với bản dịch sao cho vị trí cuối cùng của hình ảnh phụ thuộc vào kích thước của nó. kết quả là mọi thứ trông khác nhau trên iPad và iPhone. – headkit

Trả lời

16

Tôi hiện đã kết thúc bằng mã sau, nhưng tôi vẫn không biết đây có phải là giải pháp hiện đại hay không.

CGAffineTransform translate = CGAffineTransformMakeTranslation(self.webView.frame.origin.x,self.webView.frame.origin.y - self.webView.frame.size.height * 0.25); 
CGAffineTransform scale = CGAffineTransformMakeScale(0.6, 0.6); 
CGAffineTransform transform = CGAffineTransformConcat(translate, scale); 
transform = CGAffineTransformRotate(transform, degreesToRadians(-10)); 

[UIView beginAnimations:@"MoveAndRotateAnimation" context:nil]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDuration:2.0]; 

    screenShotView.transform = transform; 

[UIView commitAnimations]; 
+0

hoạt động như sự quyến rũ! Cảm ơn – MasterRazer

7

Cách ưa thích của iOS 7 để thực hiện việc này sẽ sử dụng đối tượng khối. Nó có một số lợi thế so với cách 'hoạt hình' cũ hơn. Đặc biệt là nó có thể tận dụng đa lõi và video đồng xử lý. Ngoài ra phần 'gọi lại' được xây dựng trong (phần hoàn thành) rất hữu ích, vì nó giữ bất kỳ thông tin trạng thái cần thiết nào và liên kết đến các đối tượng khi cần thiết.

CGAffineTransform translate = CGAffineTransformMakeTranslation(self.webView.frame.origin.x,self.webView.frame.origin.y - self.webView.frame.size.height * 0.25); 
CGAffineTransform scale = CGAffineTransformMakeScale(0.6, 0.6); 
CGAffineTransform transform = CGAffineTransformConcat(translate, scale); 
transform = CGAffineTransformRotate(transform, degreesToRadians(-10)); 

// animation using block code 
[UIView animateWithDuration:2.0 
         delay:0.0 
        options:UIViewAnimationOptionCurveEaseIn 
       animations:^{ 
        screenShotView.transform = transform; 
       }completion:^(BOOL finished){ 
        // do something if needed 
       }]; 
Các vấn đề liên quan