【问题标题】:How to do UIView style animations in Cocoa/Mac app development如何在 Cocoa/Mac 应用开发中做 UIView 风格的动画
【发布时间】:2011-10-28 21:45:25
【问题描述】:

我正在从对 iPhone 编程过渡到原生 Mac 应用程序。我想念的一件事是 UIView 动画系统的简单性。

对于 UIView 子类,我有以下两种方法:

-(void) hide{
    _isHidden=YES;
    [UIView commitAnimations];
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:0.5];  
    self.alpha = 0;
    [UIView commitAnimations];
}
-(void) show{
    _isHidden=NO;
    [UIView commitAnimations];
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:0.5];  
    self.alpha = 1;
    [UIView commitAnimations];    
}

现在我不确定如何在 Cocoa 中实现这一点。我尝试了以下方法,但我不确定它是否可以正常工作。

-(void) hide{
    [[_myView animator] setAlpha:0];
}

我有时会在淡入淡出功能仍在运行时多次调用此功能(隐藏)。

【问题讨论】:

    标签: objective-c cocoa animation uikit


    【解决方案1】:

    这应该会产生与您的 iOS 代码相同的结果:

    [NSAnimationContext beginGrouping]; {
        [[NSAnimationContext currentContext] setDuration:.5];
        [[NSAnimationContext currentContext] setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
        [_myView.animator setAlphaValue:0.0];
    } [NSAnimationContext endGrouping];
    

    默认持续时间为 0.25 秒。我不确定默认的计时功能是什么。如果你对默认设置没问题,你可以这样说:

    [_myView.animator setAlphaValue:0.0];
    

    【讨论】:

    • 别忘了#import <QuartzCore/QuartzCore.h>
    【解决方案2】:

    在 swift 4 中更新 rob mayoff 答案:

    NSAnimationContext.beginGrouping()
    NSAnimationContext.current.duration = 0.5
    NSAnimationContext.current.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
    myView.animator().alphaValue = 0
    NSAnimationContext.endGrouping()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多