use*_*880 7 cocoa animation objective-c uikit
我正在从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];
}
Run Code Online (Sandbox Code Playgroud)
现在我不知道如何在Cocoa中实现这一目标.我尝试了以下但我不确定它是否正常工作.
-(void) hide{
[[_myView animator] setAlpha:0];
}
Run Code Online (Sandbox Code Playgroud)
我有时会多次调用此函数(隐藏),而淡入淡出函数可能仍在运行.
rob*_*off 18
这应该产生与iOS代码相同的结果:
[NSAnimationContext beginGrouping]; {
[[NSAnimationContext currentContext] setDuration:.5];
[[NSAnimationContext currentContext] setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[_myView.animator setAlphaValue:0.0];
} [NSAnimationContext endGrouping];
Run Code Online (Sandbox Code Playgroud)
默认持续时间为.25秒.我不确定默认的计时功能是什么.如果您对默认值没问题,可以这样说:
[_myView.animator setAlphaValue:0.0];
Run Code Online (Sandbox Code Playgroud)
swift 4中rob mayoff答案的更新:
NSAnimationContext.beginGrouping()
NSAnimationContext.current.duration = 0.5
NSAnimationContext.current.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
myView.animator().alphaValue = 0
NSAnimationContext.endGrouping()
Run Code Online (Sandbox Code Playgroud)