2011-01-31 26 views
6

Tôi đến từ nền iOS và mới phát triển cho Mac OSX (ứng dụng coco).Dễ dàng chuyển đổi "Xem bộ điều khiển" trong ứng dụng Mac (tương tự như iOS)

Bắt đầu với dự án mã mẫu Apple "Simple Cocoa App" làm cơ sở, tôi muốn có thể chuyển đổi giữa "Chế độ xem khác" hoặc thậm chí giữa NSView theo bất kỳ cách nào tương tự như ứng dụng iOS. Thật không may, tôi không thể tìm cách để thực hiện điều này - và internet thiếu tài nguyên gắn với từ khóa như "Xem chuyển đổi trong ứng dụng ca cao, chuyển đổi chế độ xem trong ứng dụng mac, hướng dẫn ứng dụng mac" ...

Bạn có biết hướng dẫn nào và đây là kicker, thực tế bao gồm vấn đề chuyển đổi giữa các chế độ xem? Hoặc có lẽ biết về bất kỳ cách nào nhanh chóng bạn có thể có thể giải thích trong câu trả lời Stack Overflow của bạn?

Bằng chứng về khái niệm
Một bằng chứng rất đơn giản về khái niệm có thể như sau. Trong một ứng dụng đơn giản, có hai chế độ xem - Màn hình 1 (hiện được hiển thị) và Màn hình 2 (ẩn màn hình):

BƯỚC 1) Khởi động ứng dụng, Màn hình 1 xuất hiện (chứa Nhãn "Màn hình 1" và nút "Tiếp theo ")
Bước 2) Nhấn nút
BƯỚC 3) Màn hình 1 slide offscreen như
BƯỚC 4) Màn hình 2 slide trong (chứa một Label single "Màn hình 2")

Cảm ơn.

Trả lời

16

Hoạt ảnh chính không được tích hợp sâu trong OS X như trên iOS. Vì vậy, bạn sẽ cần phải tự mình làm rất nhiều. Những gì bạn có thể làm là sử dụng contentView của cửa sổ dưới dạng giám sát và sau đó thực hiện như sau để chuyển sang chế độ xem khác (hoạt ảnh).

- (void)switchSubViews:(NSView *)newSubview 
{ 
    NSView *mainView = [[self window] contentView]; 
    // use a for loop if you want it to run on older OS's 
    [mainView removeAllSubViews]; 

    // fade out 
    [[mainView animator] setAplhaValue:0.0f]; 

    // make the sub view the same size as our super view 
    [newSubView setFrame:[mainView bounds]]; 
    // *push* our new sub view 
    [mainView addSubView:newSubView]; 

    // fade in 
    [[mainView animator] setAlphaValue:1.0f]; 
} 

Điều này sẽ không mang lại hiệu quả mong muốn. Nếu bạn muốn nó để cho nó một sorta hiệu lực thi hành di chuyển bạn phải bao gồm QuartzCore.framework và làm như sau:

- (void)prepareViews 
{ // this method will make sure we can animate in the switchSubViewsMethod 
    CATransition *transition = [CATransition animation]; 
    [transition setType:kCATransitionPush]; 
    [transition setSubtype:kCATransitionFromLeft]; 
    NSView *mainView = [[self window] contentView]; 
    [mainView setAnimations:[NSDictionary dictionaryWithObject:transition forKey:@"subviews"]]; 
    [mainView setWantsLayer:YES]; 
} 

sau đó trong switchSubViews: bạn chỉ cần sử dụng:

[[mainView animator] addSubView:newSubView]; 
+0

Khi tôi sử dụng mã ở trên, tại dòng "[mainView removeAllSubViews];", nó hiển thị lỗi sau ... "Không hiển thị @interface cho 'NSView' khai báo bộ chọn 'removeAllSubViews'". Lý do là gì? Vì lý do là – nbs

+0

@NidhinBalakrishnan rằng phương pháp này là một API mới, như tôi đã nói trong phần bình luận trên dòng đó, bạn sẽ phải xóa thủ công tất cả các bản xem trước (lặp qua một loạt các bản xem trước và loại bỏ từng cái một) để có được hiệu ứng mong muốn . –

3

Bạn có thể muốn kiểm tra PXNavigationBar bởi Perspx, nó có thể xử lý tình huống của bạn trong một iOS nhiều hơn như thế nào.

+0

Thanks sidyll cho liên kết hữu ích này. – m0rtimer

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