【问题标题】:Where is the best place to put code that handles UI transitions and manipulations?放置处理 UI 转换和操作的代码的最佳位置在哪里?
【发布时间】:2012-06-19 03:19:52
【问题描述】:

我的 MainViewController 中有以下代码。那是最好的地方吗?我还有其他几种具有类似行为的方法。这种类型的代码是否属于一个单独的类,仅用于 UI 转换和操作?

-(void)slideView3P{
    [self.view bringSubviewToFront:_view3P];
    if (view3PIsMinimized){
        view3PIsMinimized = NO;
        [UIView beginAnimations:@"animationOff" context:NULL]; 
        [UIView setAnimationDuration:0.5f];
        [_view3P setFrame:CGRectMake(_view3P.frame.origin.x, 7, _view3P.frame.size.width, 446)];
        [UIView commitAnimations];    
    }
    else {
        view3PIsMinimized = YES;
        [UIView beginAnimations:@"animationOff" context:NULL]; 
        [UIView setAnimationDuration:0.5f];
        [_view3P setFrame:CGRectMake(_view3P.frame.origin.x, 57, _view3P.frame.size.width, 46)];
        [UIView commitAnimations];
    }
}

【问题讨论】:

    标签: objective-c ios model-view-controller user-interface


    【解决方案1】:

    对我来说,我将创建一个名为 Helper 的模型并为动画创建类方法,如下所示:

    + (void)slideHoriWithPixel:(CGFloat) _pixel ForView:(UIView *) _view;
    
    + (void)slideVertWithPixel:(CGFloat) _pixel ForView:(UIView *) _view;
    
    + (void)popOutAnimationForView:(UIView *) _view; 
    

    会有一些简单和复杂的动画。

    好处是:

    • 您永远不知道何时会重复使用这些动画。
    • 即使您在执行另一个项目时,也可以简单地将这个 Helper Model 导入到新项目中
    • 在你完成了几个项目之后,这个模型最终可能会成为你自己的动画库。

    【讨论】:

    • 你只是做一个从 NSObject 子类化的类吗?
    【解决方案2】:

    在我的应用程序中,我通常将我的转换放在视图控制器中,就像您目前所做的那样。但是,如果您想重用转换,您可以将它们放在一个单独的类中,并将其导入到您希望转换的各种视图控制器中。请注意:我不会使用 beginAnimations:context: 和 commitAnimations,因为 Apple 不推荐它们。取自UIView Class Reference:

    动画视图

    不鼓励在 iOS 4 及更高版本中使用本节中的方法。请改用基于块的动画方法。

    +beginAnimations:context:

    +提交动画

    +setAnimationStartDate:

    +setAnimationsEnabled:

    +setAnimationDelegate:

    +setAnimationWillStartSelector:

    +setAnimationDidStopSelector:

    +setAnimationDuration:

    +setAnimationDelay:

    等等……

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 2021-12-11
      • 1970-01-01
      • 2015-09-19
      • 2019-02-24
      • 1970-01-01
      相关资源
      最近更新 更多