objective-c - iOS:如何将 UIViewAnimationCurve 转换为 UIV

UIKeyboardAnimationCurveUserInfoKey有一个 UIViewAnimationCurve值(value)。怎么转换成对应的UIViewAnimationOptionsoptions 一起使用的值+[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 插件

ios - 使用 Storyboard 的条件转场

iphone - 我的 iPhone Objective-C 代码如何在 UIWebView 中收到

iphone - 将 NSDictionary 保存到 NSUserDefaults

objective-c - 在 Objective C 中使用 extern

objective-c - 对 block 进行类型定义是如何工作的

objective-c - [NSNull null] 和 nil 有什么区别?

objective-c - 核心数据 "use scalar properties for prim