我爲iPhone做了一些非常類似的事情。但校長應該非常相似。在下面的代碼示例中,將UIView更改爲NSView,依此類推。
首先,您需要一個處理細節和編輯之間交換的根視圖控制器。
其中,有一個像這樣的方法。傳遞到方法新舊視圖是屬於新舊視圖控制器view
實例變量:
- (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
委託方法將處理從superview
刪除舊view
當它完成:
- (void) animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
[viewToRemove removeFromSuperview];
}
,不要忘了常量:
#define kScreenWidth 320.0f
#define kSlideInDuration 0.2f
有人可能是在那裏THI爲什麼我沒有使用UITabBarController
或UINavigationController
?答案是,由於我的視圖控制器的非分層結構,在我的案例中都沒有意義。實際上,我的網絡更像。所以,我用自定義的根視圖控制器來處理所有事情。
至於CATransition
,我從來沒有用過它。我很想知道更多關於它的應用程序,以及它是否可以爲這個問題提供更優雅的解決方案。
不幸的是,UIViews比NSView載入更多的功能。自從我從iPhone開發到Mac後,我實際上首先研究了您的方法。我不知道爲什麼它在Cocoa上更復雜:/ – Christoffer
這很令人沮喪。這是一個類似的問題,似乎有一個Mac解決方案http://stackoverflow.com/questions/726795/how-can-i-slide-a-view-in-and-out-of-a-window-in-a - 可可程序 –
你能否解釋倒票 –