6

Đây là bài đăng đầu tiên của tôi trên stackoverflow. Tôi là người mới phát triển iOS và tôi không phải là người nói tiếng Anh bản địa, vì vậy tôi sẽ cố hết sức để giải thích vấn đề của mình.Chuyển đổi UIViewTừ chế độ xem: sangView: hoạt ảnh không hoạt động.

Vấn đề:

Tôi đã thêm hai quan điểm để cửa sổ appdelegate của tôi và tôi muốn lật từ một đến khác sử dụng:

UIView transitionFromView:toView: 

Quan điểm thứ nhất (MainScreenView) có riêng của mình ViewController . Trên tập tin .xib của MainScreenView, tôi có một nút với một hành động gọi phương thức "goShow" được triển khai trong AppDelegate của tôi. Trong phương pháp đó tôi sử dụng UIView transitionFromView:toView: để chuyển sang chế độ xem thứ hai. Cho đến nay mọi thứ đều hoạt động tốt. Chế độ xem thứ hai của tôi (một scrollview) được khai báo theo chương trình trong AppDelegate của tôi và có một loạt các hình ảnh bên trong nó (picturesViewController) và trên đầu trang của những người đó, có một UIPinchGestureRecognizer.

Tôi đang sử dụng trình nhận dạng cử chỉ để quay lại màn hình chính của mình. Đó là nơi mà vấn đề là. Khi tôi thực hiện một cử chỉ nhúm trên scrollview, MainScreenView.view xuất hiện ngay lập tức, trước hoạt ảnh, do đó hoạt ảnh lật trông có vẻ sai.

Mã Tôi đang sử dụng là:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

mainScreen = [[MainScreenViewController alloc] initWithNibName:@"MainScreenViewController" bundle: [NSBundle mainBundle]]; 

CGRect frame = self.window.bounds; 
int pageCount = 10; 
scrollView = [[UIScrollView alloc] initWithFrame:frame]; 
scrollView.contentSize = CGSizeMake(320*pageCount, 480); 
scrollView.pagingEnabled = YES; 
scrollView.showsHorizontalScrollIndicator = FALSE; 
scrollView.showsVerticalScrollIndicator = FALSE; 
scrollView.delegate = self; 

[...] 'While' adding pictures to de scrollView 

UIPinchGestureRecognizer *twoFingerPinch = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(goBackToMain)] autorelease]; 
[scrollView addGestureRecognizer:twoFingerPinch]; 

[self.window addSubview: scrollView]; 
[scrollView setHidden:TRUE]; 
[self.window addSubview: mainScreen.view]; 

[self.window makeKeyAndVisible]; 
return YES; 
} 

-(void) goShow{ 

[UIView transitionFromView:mainScreen.view 
        toView:scrollView 
        duration:0.5 
        options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews      
       completion:NULL]; 

[UIView commitAnimations];  
} 

-(void) goBackToMain { 

[UIView transitionFromView:scrollView 
        toView:mainScreen.view 
        duration:0.5 
        options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews      
       completion:NULL]; 

[UIView commitAnimations]; 
} 

Tôi đang sử dụng hiện/ẩn quan điểm thay vì addSubview/removeFromSuperView vì tôi đã thử các add và remove và có một vụ tai nạn ứng dụng trong cử chỉ chụm, chính xác trong cùng một bước đó là không hoạt hình. Có lẽ nó là cùng một lỗi, nhưng tôi không thể tìm thấy lý do cho việc này. Bất kỳ trợ giúp sẽ được đánh giá cao.

Cảm ơn.

Ok. Với sự trợ giúp của Adrian, đây là mã UIPinchGesture đã giải quyết được vấn đề của tôi:

+1

Đó là tốt hơn rất nhiều giải thích hơn hầu hết các người nói tiếng Anh bản địa quản lý. +1. –

Trả lời

0

Read more about animations in iOS.

Trong ví dụ của bạn, bạn quên [UIView beginAnimations].

+0

Xin chào Adrian, cảm ơn bạn đã trả lời. – romeup

+0

Tôi đã đọc tài liệu của Apple về vấn đề này, nhưng dường như nó không giúp giải quyết vấn đề của tôi. Tôi đang nhắm mục tiêu ứng dụng này cho iOS4 (.3) và [UIView beginAnimations] đã không còn được dùng nữa. Apple bây giờ đề nghị sử dụng các API khối, và trong thực tế phương pháp 'goShow' của tôi hoạt động hoàn hảo. Có vẻ như 'goBackToMain' không giống nhau. Sự khác biệt giữa cả hai là 'goBackToMain' đang được gọi bởi UIPinchGestureRecognizer.Tôi không chắc chắn rằng vấn đề nằm trong mã nhận dạng cử chỉ và vấn đề chính xác là gì, nhưng tôi không thể nghĩ ra bất kỳ lý do nào khác cho lỗi này. – romeup

+0

nếu bạn đang sử dụng công cụ nhận dạng pinch, hãy thử đặt cử chỉ làm thông số để bạn có thể nhận trạng thái của cử chỉ và làm cho mã xảy ra trên một sự kiện cụ thể (UIGestureRecognizerStateBegan, ... v.v.). Dù sao nếu bạn không sử dụng các khối với hoạt ảnh, bạn vẫn nên sử dụng [UIView begnAnimations]. Dưới đây là một ví dụ với điều cử chỉ: UIPinchGestureRecognizer * twoFingerPinch = [[[UIPinchGestureRecognizer alloc] initWithTarget: tự hành động: @selector (goBackToMain :)] autorelease]; và phương thức phải là "- (void) goBackToMain: (UIGestureRecognizer *) gesture" –

0

Trước tiên, bạn không thể kết hợp phương pháp cũ beginAnimationcommitAnimation kết hợp với phương pháp chặn mới transitionFromView.

Thứ hai, khi sử dụng hoạt ảnh khối phương pháp, hãy đảm bảo bạn sử dụng vùng chứa (có thể là UIView) sẽ là phụ huynh của hai chế độ xem bạn muốn chuyển đổi. Nếu không có vùng chứa, bạn sẽ làm động toàn bộ khung nhìn thay thế. Đảm bảo rằng vùng chứa có cùng kích thước với các bản xem phụ sẽ chuyển đổi.

Ví dụ:

 

    [container addSubView:frontView]; 
    [container addSubView:backView]; 

    [self.view addSubView:container]; 

    [UIView transitionFromView:backView toView:frontView duration:0.5 options:UIViewAnimationOptionTransitionFlipFromRight completion:nil]; 

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