2012-02-16 29 views
14

Tôi có hoạt ảnh segue tùy chỉnh xảy ra khi đẩy bộ điều khiển chế độ xem mới lên ngăn xếp. Tuy nhiên, khi bật trình điều khiển xem được trình bày với khoảng cách tùy chỉnh đã nói, hoạt ảnh của trình điều khiển điều hướng mặc định sẽ xuất hiện (tức là trình điều khiển chế độ xem hiện hoạt ở bên phải trong khi trình điều khiển chế độ xem gốc dịch trên màn hình từ cạnh trái).Hoàn nguyên phân đoạn tùy chỉnh bằng cách tạo bảng phân cảnh

Vì vậy, câu hỏi của tôi là: có cách nào để viết hoạt ảnh phân biệt pop tùy chỉnh xảy ra khi bật trình điều khiển chế độ xem khỏi ngăn xếp không?

Chỉnh sửa (giải pháp):

tôi đã kết thúc việc xác định một tùy chỉnh Segue tương tự như câu trả lời được chọn. Trong Storyboard, tôi đã kéo một phân đoạn tùy chỉnh từ bộ điều khiển xem con trở lại với phần tử cha của nó, cho nó một mã định danh và phân tách ngược mới được viết như lớp của nó. Vâng, tôi nhận ra nó hầu như giống hệt với quá trình chuyển đổi phương thức. Yêu cầu của khách hàng đòi hỏi sự điên rồ này, vì vậy trước khi có ai đó bình luận, hãy hiểu rằng tôi biết một người không nên làm điều này trong những hoàn cảnh bình thường.

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

    [UIView animateWithDuration:0.3 animations:^{ 
    CGRect f = src.view.frame; 
    f.origin.y = f.size.height; 
    src.view.frame = f; 

    } completion:^(BOOL finished){ 
    src.view.alpha = 0; 
    [src.navigationController popViewControllerAnimated:NO]; 
    }]; 
} 
+0

Vì vậy, để được rõ ràng, bạn đang thực sự đảo ngược segue tùy chỉnh, bạn đang thay vì sử dụng một segue tùy chỉnh riêng biệt để quay trở lại? – sobri

+3

Bằng cách sử dụng một vòng lặp segue trở lại chính nó, không phải là bạn vẫn tạo ra một thể hiện của bộ điều khiển xem ban đầu không cần thiết? Tôi đoán không ai sẽ nhận thấy ngoại trừ một đốm ngắn trong một hồ sơ bộ nhớ. :) – qix

Trả lời

19

Có. Đây là một ví dụ mà tôi bật lên cấp cao nhất. Khi bạn tạo segue trong Storyboard. Sử dụng lựa chọn hoặc nhập lớp segue mới trong thanh tra thuộc tính.

// 
// FlipTopPop.h 

#import <UIKit/UIKit.h> 


@interface FlipTopPopToRoot : UIStoryboardSegue 

@end 

// FlipTopPop.m 

#import "FlipTopPopToRoot.h" 

@implementation FlipTopPopToRoot 

- (void) perform { 

    UIViewController *src = (UIViewController *) self.sourceViewController; 
    [UIView transitionWithView:src.navigationController.view duration:0.5 
        options:UIViewAnimationOptionTransitionFlipFromBottom 
       animations:^{ 
        [src.navigationController popToViewController:[src.navigationController.viewControllers objectAtIndex:0] animated:NO];; 
       } 
        completion:NULL]; 
} 

@end 

Nếu bạn muốn bật lên chỉ là một sự thay đổi mức độ sử dụng này segue tùy chỉnh:

// PopSegue.h 

#import <UIKit/UIKit.h> 

@interface PopSegue : UIStoryboardSegue 

@end 

// PopSegue.m 

#import "PopSegue.h" 

@implementation PopSegue 

- (void) perform { 

    UIViewController *src = (UIViewController *) self.sourceViewController; 
    [src.navigationController popViewControllerAnimated:YES]; 
} 

@end

+0

PopSegue phải nằm ngoài UIKit. Tốt nhất! – Eric

+0

Điều này tạo ra/deallocates một bộ điều khiển xem đích mới không cần thiết. Nó sẽ là tốt nhất để không sử dụng một Segue và thay vào đó chỉ cần bật trình điều khiển xem. Có, tôi đồng ý - Apple nên bao gồm hỗ trợ cho một segue pop. – mdupls

+0

Tôi thích các giải pháp cho PopToRoot, nhưng một cho pop chỉ là một cái nhìn ... không nhiều. Tôi đã thêm một chút gì đó để khi bạn cần quay lại chỉ một hoạt ảnh vẫn tồn tại: - (void) thực hiện { UIViewController * src = (UIViewController *) self.sourceViewController; [UIView transitionWithView: src.navigationController.view duration: 0.5 tùy chọn: UIViewAnimationOptionTransitionCrossDissolve hoạt ảnh:^{ [src.navigationController popViewControllerAnimated: NO]; } hoàn thành: NULL]; } – ChavirA

0

Khi bình luận Linus chỉ ra, các giải pháp khác được trình bày sẽ tạo ra một thể hiện khác của UIViewController. Tôi nghĩ rằng liên kết này ở đây mô tả các lựa chọn thay thế khác để kích hoạt các hình ảnh động ngược chiều.

http://robsprogramknowledge.blogspot.com/2012/05/back-segues.html

+1

Bài viết nói về việc truyền thông tin từ bộ điều khiển chế độ xem đến bộ điều khiển chế độ xem gốc, không có gì về hoạt ảnh hoặc chuyển tiếp. – b123400

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