Я делаю что-то очень похожее для iPhone.Однако принципал должен быть очень похожим.В приведенных ниже примерах кода измените UIView на NSView и т. Д.
Во-первых, вам потребуется контроллер корневого представления, который обрабатывает переключение между детализацией и редактированием.
В нем естьметод что-то вроде этого.Старое и новое представления, переданные в метод, представляют собой view
ivars, принадлежащие старому и новому контроллеру представления:
- (void) slideInNewViewFromRight:(UIView *)newView oldView:(UIView *)oldView remove:(BOOL)remove
{
UIView *superView = [oldView superview];
[superView insertSubview:newView belowSubview:oldView];
CGRect oldFrame = [oldView frame];
oldFrame.origin = CGPointMake(-kScreenWidth, 0.0f);
CGRect newFrame = [newView frame];
newFrame.origin = CGPointMake(kScreenWidth, 0.0f);
newView.frame = newFrame;
newFrame.origin = CGPointMake(0.0f, 0.0f);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:kSlideOffDuration];
[UIView setAnimationDelegate:self];
if (remove) {
[self setViewToRemove:oldView];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
}
[oldView setFrame:oldFrame];
[newView setFrame:newFrame];
[UIView commitAnimations];
}
Метод делегата animationDidStop
будет обрабатывать удаление старого view
из superview
когда он завершает:
- (void) animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
[viewToRemove removeFromSuperview];
}
И не забывая о константах:
#define kScreenWidth 320.0f
#define kSlideInDuration 0.2f
Возможно, кто-то там думает, почему я не сделал это, используя UITabBarController
илиUINavigationController
?Ответ в том, что ни один из них не имел смысла в моем случае из-за неиерархической структуры моих контроллеров представления.На самом деле мой больше похож на сеть.Итак, я справляюсь со всем с помощью пользовательского контроллера корневого представления.
Что касается CATransition
, я никогда не использовал его.Мне было бы интересно узнать больше о его приложениях и о том, сможет ли он предоставить более элегантное решение этой проблемы.