UIKeyboardAnimationCurveUserInfoKey
有一个 UIViewAnimationCurve
值(value)。怎么转换成对应的UIViewAnimationOptions
与 options
一起使用的值+[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
创建一个简单的类别方法。声明,像这样:
// 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
但是,有没有更简单/更好的方法?
最佳答案
您建议的类别方法是执行此操作的“正确”方法 - 您不一定能保证这些常量保持其值。但是,从查看它们的定义方式来看,您似乎可以这样做
animationOption = animationCurve << 16;
...如果编译器想提示的话,可能会先转换为 NSUInteger,然后再转换为 UIViewAnimationOptions。
关于objective-c - iOS:如何将 UIViewAnimationCurve 转换为 UIViewAnimationOptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7327249/
相关文章:
objective-c - 尝试标记应用程序图标,但未获得用户标记应用程序的权限 : iOS 8 X
ios - 如何在 iPhone 上显示来自 API 的 HTML 文本?
objective-c - 如何编写 OS X Finder 插件
iphone - 我的 iPhone Objective-C 代码如何在 UIWebView 中收到
iphone - 将 NSDictionary 保存到 NSUserDefaults
objective-c - 在 Objective C 中使用 extern
objective-c - 对 block 进行类型定义是如何工作的