該UIKeyboardAnimationCurveUserInfoKey
有一個UIViewAnimationCurve
值。如何將其轉換爲相應的UIViewAnimationOptions
值,供參數+[UIView animateWithDuration:delay:options:animations:completion:]
使用?iOS:如何將UIViewAnimationCurve轉換爲UIViewAnimationOptions?
// 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
但是,有一種更簡單/更好的辦法?
我該怎麼做?我認爲在可能的情況下,LLVM會自動將Objective-C方法轉換爲內聯函數。 – ma11hew28
聽起來像別人已經回答了你的問題:http://stackoverflow.com/questions/8194504/does-llvm-convert-objective-c-methods-to-inline-functions –
我添加了內聯版本到我的答案。 –