2011-06-14 54 views
0

我用下面的代码交换意见如何编写Objective-C的功能

- (void)loading2menu{ 

[UIView beginAnimations:@"Loading2Menu" context:nil]; 
[UIView setAnimationDuration:1.25]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

if (self.menuViewController.view.superview == nil) 
{ 
    if (self.menuViewController == nil) 
    { 
     MenuViewController *menuController = 
     [[MenuViewController alloc] initWithNibName:@"MenuView" 
              bundle:nil]; 
     self.menuViewController = menuController; 
     [menuController release]; 
    } 

    [UIView setAnimationTransition: 
    UIViewAnimationTransitionCurlUp 
          forView:self.view cache:YES]; 

    [loadingViewController viewWillAppear:YES]; 
    [menuViewController viewWillDisappear:YES]; 
    [loadingViewController.view removeFromSuperview]; 
    [self.view insertSubview:menuViewController.view atIndex:0]; 
    [menuViewController viewDidDisappear:YES]; 
    [loadingViewController viewDidAppear:YES]; 
} 
else 
{ 
    if (self.loadingViewController == nil) 
    { 
     LoadingViewController *loadingController = 
     [[LoadingViewController alloc] initWithNibName:@"LoadingView" 
               bundle:nil]; 
     self.loadingViewController = loadingController; 
     [loadingController release]; 
    } 

    [UIView setAnimationTransition: 
    UIViewAnimationTransitionCurlDown 
          forView:self.view cache:YES]; 

    [menuViewController viewWillAppear:YES]; 
    [loadingViewController viewWillDisappear:YES]; 
    [menuViewController.view removeFromSuperview]; 
    [self.view insertSubview:loadingViewController.view atIndex:0]; 
    [loadingViewController viewDidDisappear:YES]; 
    [menuViewController viewDidAppear:YES];   
} 

[UIView commitAnimations]; 

}

我认为这是太多的代码,并且如果我必须切换更多的意见,我必须多写这样的代码,它浪费时间,是不是要做到这一点的最好办法,所以我写做同样的事情

- (void)switchtheviews:(UIViewController*)coming over:(UIViewController*)going {  
[UIView beginAnimations:@"frame" context:nil]; 
[UIView setAnimationDuration:1]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:viewController.view cache:YES]; 
[coming viewWillAppear:YES]; 
[going viewWillDisappear:YES]; 
[going.view removeFromSuperview]; 
[viewController.view insertSubview:coming.view atIndex:0]; 
[going viewDidDisappear:YES]; 
[coming viewDidAppear:YES]; 
[UIView commitAnimations]; 

    } 

这么一个功能,我怎么能调用这个函数?如果我使用旧的,我可以用

[[MyAppsAppDelegate App].switchViewController loading2menu]; 

但这种新的,我应该怎么写调用新的功能?感谢

+0

你能澄清你想要做什么吗?你只是想用另一个视图替换一个视图? – 2011-06-14 17:57:08

+0

是的,我只是想通过减少代码来替换一个视图。我也想知道如何在代码中调用函数“switchtheviews”,谢谢 – matt 2011-06-14 18:05:04

回答

0

您可以编写一个C函数是这样的:

void switchtheviews(UIViewController *coming, UIViewController *going) 
{ 
... 
/* there is no self here */ 
... 
} 

而且在任何地方使用它在您的代码中:

switchtheviews(v1, v2);

我不认为这是你想要的。你可以编写一个私有方法来做同样的事情,并将所有内容封装在你的类中。尝试这样的事情在你的.m文件(这是私人的东西,没有必要把它放在.h):

// MegaCoolViewController.m 

@interface MegaCoolViewController() 

- (void)_switchtheviews:(UIViewController*)coming over:(UIViewController*)going; 

@end 


@implementation MegaCoolViewController 

#pragma mark - Private 

- (void)_switchtheviews:(UIViewController*)coming over:(UIViewController*)going 
{ 
/* do your thing, use self freely */ 
} 

@end 

正如你可以在其他的答案读,有更简单的方法来切换视图。我只是回答了问题的语法部分。

0

我不认为你需要使用动画什么你在做。它应该只是是这样的:

[objectName removeFromSuperview]; 
[superViewName addSubview:otherView]; 

要调用你的函数,它应该是:

[object switchTheViews:viewController over:otherViewController];