Tôi đã đến SO tìm kiếm một giải pháp thanh lịch hơn, nhưng đây là cách tôi đã (thành công) làm điều đó cho đến nay.
Ý tưởng cơ bản:
- KHÔNG sử dụng UINavigationController; thay vì sử dụng nó là bộ phận cấu thành (ví dụ UINavigationBar) và làm công việc mình
- Kích hoạt thanh điều hướng để animate song song với hình ảnh động tùy chỉnh của riêng bạn (hay không, nếu bạn muốn có anim ở tất cả)
Những nhược điểm:
- UINavigationController xử lý một số việc khác, như tự động tải/dỡ bộ nhớ. Ngoài ra, nó "cứng mã hóa" vào tất cả UIViewControllers - họ luôn luôn có một tham chiếu đến UINavigationController có chứa chúng. Đó là một sự xấu hổ để ném tất cả điều này đi chỉ vì Apple không cung cấp một cái móc để thiết lập hình ảnh động tùy chỉnh.
Mã - trong bất cứ lớp tiếp quản cho các hình ảnh động:
UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"];
[navigationController.navigationBar pushNavigationItem:backItem animated:TRUE];
// next line only needed if you want a custom back anim too
navigationController.navigationBar.delegate = self;
... nếu bạn cũng muốn cắt hợp với tùy chỉnh lại hình ảnh động, bạn cần có dòng cuối cùng ở trên, do đó bạn sau đó có thể nghe thanh điều hướng và phản ứng song song, như sau:
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
// trigger your custom back animation here
return TRUE;
}
Tại sao bạn muốn để phá vỡ giao diện người dùng với hành vi phi tiêu chuẩn? –
Nó không phải là tôi muốn phá vỡ giao diện người dùng với hành vi không chuẩn. Tôi chỉ không hiểu tại sao các tính năng SDK kiểm soát việc đẩy được hoạt ảnh hay không nhưng không có tính năng kiểm soát tương tự cho một cửa sổ bật lên. Tôi cảm thấy nó không nhất quán. –
hành vi phi tiêu chuẩn khiến chúng tôi phát triển :) – Zac