iOS:如何将 UIViewAnimationCurve 转换为 UIViewAnimationOptions? [英] iOS: How to convert UIViewAnimationCurve to UIViewAnimationOptions?
问题描述
UIKeyboardAnimationCurveUserInfoKey
有一个 UIViewAnimationCurve
值.如何将其转换为相应的 UIViewAnimationOptions
值以与 +[UIView animateWithDuration:delay:options:animations:completion:]
options 参数一起使用代码>?
The UIKeyboardAnimationCurveUserInfoKey
has a UIViewAnimationCurve
value. How do I convert it to the corresponding UIViewAnimationOptions
value for use with the options
argument of +[UIView animateWithDuration:delay:options:animations:completion:]
?
// UIView.h
typedef enum {
UIViewAnimationCurveEaseInOut, // slow at beginning and end
UIViewAnimationCurveEaseIn, // slow at beginning
UIViewAnimationCurveEaseOut, // slow at end
UIViewAnimationCurveLinear
} UIViewAnimationCurve;
// ...
enum {
// ...
UIViewAnimationOptionCurveEaseInOut = 0 << 16, // default
UIViewAnimationOptionCurveEaseIn = 1 << 16,
UIViewAnimationOptionCurveEaseOut = 2 << 16,
UIViewAnimationOptionCurveLinear = 3 << 16,
// ...
};
typedef NSUInteger UIViewAnimationOptions;
显然,我可以使用 switch
语句创建一个简单的类别方法,如下所示:
Obviously, I could create a simple category method with a switch
statement, like so:
// UIView+AnimationOptionsWithCurve.h
@interface UIView (AnimationOptionsWithCurve)
@end
// UIView+AnimationOptionsWithCurve.m
@implementation UIView (AnimationOptionsWithCurve)
+ (UIViewAnimationOptions)animationOptionsWithCurve:(UIViewAnimationCurve)curve {
switch (curve) {
case UIViewAnimationCurveEaseInOut:
return UIViewAnimationOptionCurveEaseInOut;
case UIViewAnimationCurveEaseIn:
return UIViewAnimationOptionCurveEaseIn;
case UIViewAnimationCurveEaseOut:
return UIViewAnimationOptionCurveEaseOut;
case UIViewAnimationCurveLinear:
return UIViewAnimationOptionCurveLinear;
}
}
@end
但是,有没有更简单/更好的方法?
But, is there an even easier/better way?
推荐答案
可以说,您可以采用第一个解决方案并将其设为内联函数,以节省堆栈推送.这是一个非常严格的条件(常量绑定等),它应该编译成一个非常小的程序集.
Arguably you can take your first solution and make it an inline function to save yourself the stack push. It's such a tight conditional (constant-bound, etc) that it should compile into a pretty tiny piece of assembly.
根据@matt,你开始吧(目标-C):
Per @matt, here you go (Objective-C):
static inline UIViewAnimationOptions animationOptionsWithCurve(UIViewAnimationCurve curve)
{
switch (curve) {
case UIViewAnimationCurveEaseInOut:
return UIViewAnimationOptionCurveEaseInOut;
case UIViewAnimationCurveEaseIn:
return UIViewAnimationOptionCurveEaseIn;
case UIViewAnimationCurveEaseOut:
return UIViewAnimationOptionCurveEaseOut;
case UIViewAnimationCurveLinear:
return UIViewAnimationOptionCurveLinear;
}
}
斯威夫特 3:
extension UIViewAnimationOptions {
init(curve: UIViewAnimationCurve) {
switch curve {
case .easeIn:
self = .curveEaseIn
case .easeOut:
self = .curveEaseOut
case .easeInOut:
self = .curveEaseInOut
case .linear:
self = .curveLinear
}
}
}
这篇关于iOS:如何将 UIViewAnimationCurve 转换为 UIViewAnimationOptions?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!