2012-01-04 24 views
6

Tôi đã tạo ứng dụng có bảng phân cảnh, với bộ điều khiển chế độ xem ban đầu, được kết nối với nhiều bộ điều khiển chế độ xem tiếp theo, được kết nối tuần tự, sử dụng phân tách chéo. Những công việc một swipes. Tất cả đều ổn. Tuy nhiên, thay vì bị buộc phải sử dụng các phân đoạn cơ bản, tôi muốn có một khoảng cách tùy chỉnh sẽ trượt nội dung của trình điều khiển xem và tắt màn hình, giống như đẩy cho navigationControllers, nhưng được bật sang trái và phải tùy theo một trong số đó tiến lên hoặc lùi trong ứng dụng.Làm thế nào để mã một segue tùy chỉnh mà "slide" giữa View Controller?

Tôi đã đặt segue thành tùy chỉnh và đã tạo và lưu tệp MySegue.h. BAO GIỜ, tôi không biết làm thế nào để mã một segue tùy chỉnh mà sẽ trượt một viewcontroller tắt màn hình như các slide khác trên và qua lại khi tôi di chuyển giữa các bộ điều khiển xem.

Có thể bất cứ ai vui lòng cung cấp cho tôi mã hóa (dễ dàng!) Cho một khoảng cách tùy chỉnh để di chuyển từ bộ điều khiển chế độ xem sang chế độ xem tiếp theo và quay lại bằng cách trượt màn hình và tắt để tôi không phải sử dụng cơ bản chéo hòa tan hoặc tiêu chuẩn flips được cung cấp trong Xcode 4.2? Tôi sẽ là người cảm kích nhất.

Trả lời

0

Tại sao không chỉ sử dụng UINavigationController? Điều này có vẻ là chính xác những gì họ đang thiết kế cho.

+0

Vì chúng chỉ trượt từ phải sang trái, không phải từ trái sang phải khi vuốt giữa "trang", đó là những gì tôi thiết lập bộ điều khiển chế độ xem của mình hoạt động như. Ngoài ra, tôi có một đồ họa cho một thanh tiêu đề và không muốn các thanh điều khiển chuyển hướng tiêu chuẩn. Tôi có thể nói hoàn toàn ngoài trường và không thực sự hiểu UINavigationController. Tôi có thể trượt qua lại bằng cách trượt nội dung trên màn hình theo cả hai hướng không? – user1130050

+0

UINaviagtionController có lẽ là những gì bạn muốn. Và trong iOS 5, bạn hoàn toàn có thể tùy chỉnh thanh điều hướng ở trên cùng. Hoặc đặt thuộc tính naviationBarHidden và đặt các điều khiển tùy chỉnh của riêng bạn trên màn hình. – agilityvision

+0

Cảm ơn.Tôi có cần mã hóa đặc biệt để làm cho nó đẩy "trở lại" khi bạn đi ngược lại trong chuỗi giữa các bộ điều khiển xem? – user1130050

4

Tôi đã gặp sự cố tương tự ở đây nhưng tôi đã sử dụng cử chỉ vuốt để chuyển từ một bộ điều khiển chế độ xem sang bộ điều khiển chế độ xem tiếp theo. Sử dụng bảng phân cảnh để thiết lập phân đoạn đã hoạt động tốt, nhưng khi tôi cần vuốt để "quay lại" với trình điều khiển chế độ xem trước đó, hoạt ảnh từ phải sang trái, thay vì từ trái sang phải. Để khắc phục sự cố đó, tôi đã làm như sau:

  1. Nhúng Trình điều khiển điều hướng trong bộ điều khiển chế độ xem gốc.
  2. Được sử dụng phân đoạn để đẩy bộ điều khiển chế độ xem mới.
  3. Khi tôi muốn "quay lại" với bộ điều khiển chế độ xem trước đó, tôi không thêm khoảng cách vào bảng phân cảnh để đẩy trình điều khiển chế độ xem trước đó. Thay vào đó, tôi gọi phương thức popViewControllerAnimated của Bộ điều khiển Điều hướng bất cứ khi nào xảy ra hiện tượng vuốt ngược.
+0

Điều này giống như giải pháp tốt nhất và mượt mà nhất. – fr00tyl00p

2

Để tạo phân đoạn tùy chỉnh trình chiếu bộ điều khiển chế độ xem trước tiên hãy tạo lớp mở rộng UIStoryboardSegue, sau đó ghi đè bộ chọn thực hiện. Tôi chỉ làm một cái gì đó như thế này và nó sẽ làm việc cho bạn quá. Dưới đây là mã của tôi:

#define kAnimationDuration 0.5 

#import "CustomSlideSegue.h" 

@implementation CustomSlideSegue 

- (void)perform 
{ 
    UIViewController *sourceViewController = (UIViewController *) self.sourceViewController; 
    UIViewController *destinationViewController = (UIViewController *) self.destinationViewController; 

    [sourceViewController.view addSubview:destinationViewController.view]; 
    [destinationViewController.view setFrame:sourceViewController.view.window.frame]; 

    [destinationViewController.view setBounds:sourceViewController.view.bounds]; 
    CGSize screenSize = [[UIScreen mainScreen] bounds].size; 

    if (!self.slideLeft) { 
     [UIView animateWithDuration:kAnimationDuration 
           delay:0.0 
          options:UIViewAnimationOptionCurveEaseOut 
         animations:^{ 
          [destinationViewController.view setCenter:CGPointMake(screenSize.height + screenSize.height/2, screenSize.height/2 - 138)]; 
          [destinationViewController.view setCenter:CGPointMake(screenSize.width/2 + 127, screenSize.height/2 - 138)]; 
         } 
         completion:^(BOOL finished){ 
          [destinationViewController.view removeFromSuperview]; 
          [sourceViewController presentViewController:destinationViewController animated:NO completion:nil]; 
         }]; 
    } else { 
     [UIView animateWithDuration:kAnimationDuration 
           delay:0.0 
          options:UIViewAnimationOptionCurveEaseOut 
         animations:^{ 
          [destinationViewController.view setCenter:CGPointMake(-1*screenSize.height/2, screenSize.height/2 - 138)]; 
          [destinationViewController.view setCenter:CGPointMake(screenSize.width/2 + 127, screenSize.height/2 - 138)]; 
         } 
         completion:^(BOOL finished){ 
          [destinationViewController.view removeFromSuperview]; 
          [sourceViewController presentViewController:destinationViewController animated:NO completion:nil]; 
         }]; 
    } 
} 

Sau đó, khi bạn muốn thực hiện các segue sử dụng mã này:

UIViewController *destination = [self.storyboard instantiateViewControllerWithIdentifier:@"some identifier"]; 
    CustomZoomSegue *segue = [[CustomZoomSegue alloc] initWithIdentifier:@"segue vc identifier" source:self destination:destination]; 
    [self prepareForSegue:segue sender:self]; 
    [segue perform]; 

Các cuộc gọi CGPointMake là tùy chỉnh để mã của tôi (Tôi đã từng định hướng ngang) nhưng bạn sẽ có thể thay đổi nó để phù hợp với nhu cầu của bạn. Nếu bạn cần làm rõ thêm hoặc có bất kỳ câu hỏi nào cho tôi biết và tôi sẽ cố gắng trả lời.

LƯU Ý: Tôi sử dụng bảng phân cảnh không có đường phân biệt giữa các trình điều khiển chế độ xem.

+0

Điều này làm việc rất tốt cho tôi bằng cách sử dụng một kỹ thuật tương tự. Tôi đã không nghĩ để thêm điểm đến đích vào nguồn. Ý tưởng tuyệt vời. –

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