Я собираюсь сделать слайд UITableView в стиле Facebook.
Я достиг этого, анимация, тень и все. Меня беспокоит то, что я делаю это совершенно неправильно, и что-то получается, что все работает не совсем правильно.
Приложение имеет rootViewController (из UIWindow), который является UINavigationController. Представление внутри UINavigationController (его корневой контроллер представления) имеет свой набор свойств leftBarButtonItem. Вот код, который запускается при нажатии кнопки.
- (void)showFeedList {
//set the feed list as showing even before it is
feedListShowing = YES;
//to show the feed list, we need to instanciate one
feedSelectionListViewController = [[FeedSelectionListViewController alloc] initWithNibName: @"FeedSelectionListViewController" bundle: nil];
//set the frame to 200 points to the left of the screen
feedSelectionListViewController.view.frame = CGRectOffset(feedSelectionListViewController.view.frame, -200, 20);
NSInteger offset = feedSelectionListViewController.view.frame.size.width;
//store a pointer to the root navigation controller, and add the list view controller's view to the navigation controller's view
UINavigationController *navigationController = (UINavigationController *)UIApplication.sharedApplication.delegate.window.rootViewController;
[navigationController.view addSubview: feedSelectionListViewController.view];
//animate the navigation bar, feed selection list, and this view controller's view to the right
[UIView animateWithDuration: LIST_SHOW_TRANSITION_TIME animations: ^{
self.view.frame = CGRectOffset(self.view.frame, offset, 0);
navigationController.navigationBar.frame = CGRectOffset(navigationController.navigationBar.frame, offset, 0);
feedSelectionListViewController.view.frame = CGRectOffset(feedSelectionListViewController.view.frame, offset, 0);
}];
}
Это действительно грязно, и не все в этом работает правильно. Во-первых, когда пользователь уходит и возвращается в приложение, UINavigationBar, кажется, сбросил его фрейм. Это также происходит, когда строка состояния входящего вызова включается и выключается. Во-вторых, любые виды внутри представления справа не перемещаются вправо так, как следовало бы. Я не знаю, почему это так.
Однако, если я заменю блок анимации на
navigationController.view.frame = CGRectOffset(navigationController.view.frame, 200, 0);
Работает нормально. Подвиды представления, отображаемого в настоящее время навигационным контроллером, перемещаются соответствующим образом, и все находится в нужном месте, когда приложение возобновляется. Однако вид боковой панели не принимает сенсорные события, прикосновения, сделанные над боковой панелью, теперь обрабатываются AppDelegate. Я подозреваю, что это потому, что фрейм UIView имеет происхождение {-200, 0}, хотя я не могу быть уверен.
Не думаю, что я что-то понимаю. Это даже правильный способ сделать это? Я не могу придумать какие-либо другие способы сделать это. В любом случае, заранее большое спасибо за любые рекомендации или предложения.
Матф