2011-10-07 43 views
6

Tôi muốn xoay UIView trên trục ngang của nó cho 360 độ và sau đó làm mới nội dung trong chế độ xem. Tôi đang tìm kiếm các giải pháp về vấn đề này. Tìm thấy một cặp vợ chồng ở đây n ở đó. Đây là những gì tôi đã đưa ra.Xoay UIView trên trục X của nó (Trục ngang)

[UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{ 
     self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0); 
    } completion:^(BOOL finished){ 
     NSLog(@"Finished first pi"); 
     [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{ 
      self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0); 
     } completion:^(BOOL finished) { 
      NSLog(@"Finished second pi"); 

     }];   

    }]; 

Điều này lật chế độ xem nhưng chỉ 180 độ. Tôi muốn nó lật một lần nữa để tôi có thể nhìn thấy khung cảnh bình thường ..

Cả hai NSLogs của tôi đều được hiển thị lần lượt. Tôi chắc chắn tôi đang thiếu một cái gì đó ở đây. Bất kỳ trợ giúp sẽ là hữu ích ..

Cảm ơn

Trả lời

8

Trong khối hoàn thành của bạn, hãy thử ghép nối biến đổi mới với biến đổi hiện tại.

self.tableView.layer.transform = CATransform3DConcat(self.tableView.layer.transform, CATransform3DMakeRotation(M_PI,1.0,0.0,0.0)); 
+1

Bạn không cần đặt 'transform' trên' CALayer' trực tiếp trong trường hợp này, bạn có thể chỉ cần đặt 'transform' trên' UIView', mặc dù nó là một kiểu 'struct' khác - một' CGAffineTransform'. –

+0

Đúng vậy. Tôi chỉ muốn đi ra khỏi ví dụ được đưa ra. Tôi luôn sử dụng biến đổi trên UIView. – jaminguy

1

Bạn nên kiểm tra câu trả lời này How to make a CATransform3dMakeRotation rotate the other way? And chain together

Tôi nghĩ rằng vấn đề của bạn có liên quan với: "Khi bạn đang làm việc với một chuyển đổi trực tiếp, Core Animation sẽ suy các Biến đổi từ giá trị hiện tại sang biến đổi được chỉ định, nó sẽ tìm đường đi ngắn nhất để chuyển sang biến đó, điều này sẽ hạn chế hướng hoạt ảnh, nếu bạn cố gắng làm động cùng một thuộc tính biến đổi hai lần, giá trị thứ hai sẽ đơn giản ghi đè đầu tiên, chứ không phải kết hợp hai biến đổi với nhau. "

1

sử dụng này: -

rotatingView.layer.anchorPoint = CGPointMake(0.0f, 0.0f); 
    rotatingView.center = CGPointMake(0, 
             (rotatingView.center.y - 
             (rotatingView.bounds.size.height/2.0f))); 
    rotatingView.center = CGPointMake(0, 
             (rotatingView.center.y- 
             (rotatingView.bounds.size.height/2))); 

// start the Page Open 
[UIView beginAnimations:@"Animation" context:nil]; 
[UIView setAnimationDuration:13.0]; 
// set angle as per requirement 
[rotatingView.layer setValue:[NSNumber numberWithInt:280] 
        forKeyPath:@"transform.rotation.x"]; 

[UIView commitAnimations]; 
0

Bạn chỉ cần phải thay đổi mã của bạn 1,0-0,0 bên trong khối hoàn thành và woohoo tất cả được thực hiện.

[UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{ 
      self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0); 
     } completion:^(BOOL finished){ 
      NSLog(@"Finished first pi"); 
      [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{ 
       self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,0.0,0.0,0.0); 
      } completion:^(BOOL finished) { 
       NSLog(@"Finished second pi"); 

      }];   

     }]; 
0

Bạn cũng có thể tiếp cận này sử dụng đếm lặp lại các .Repeat.Autoreverse tùy chọn hình ảnh động + thiết lập hình ảnh động của. Dưới đây là ví dụ trong Swift:

UIView.animateWithDuration(time, delay: 0, options: [.Repeat, .Autoreverse], animations: { 
     UIView.setAnimationRepeatCount(3) 
     self.view.layer.transform = CATransform3DMakeRotation(CGFloat(M_PI), 1, 0, 0) 
    }) { (completed) in 
     // completion 
    } 
Các vấn đề liên quan