【发布时间】:2015-06-28 19:00:38
【问题描述】:
我正在关注如何使用 UIKit Dynamics 为菜单设置动画的 Objective-C 教程,但在将以下代码从 Objective-C 转换为 Swift 时遇到了一些问题。
动画师.h
@interface Animator : NSObject
+ (instancetype)animatorWithScreen:(UIScreen *)screen;
- (void)addAnimation:(id<Animation>)animatable;
- (void)removeAnimation:(id<Animation>)animatable;
@end
@interface UIView (AnimatorAdditions)
- (Animator *)animator;
@end
动画师.m
@implementation Animator
{
}
+ (instancetype)animatorWithScreen:(UIScreen *)screen
{
if (!screen) {
screen = [UIScreen mainScreen];
}
Animator *driver = objc_getAssociatedObject(screen, &ScreenAnimationDriverKey);
if (!driver) {
driver = [[self alloc] initWithScreen:screen];
objc_setAssociatedObject(screen, &ScreenAnimationDriverKey, driver, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
return driver;
}
@implementation UIView (AnimatorAdditions)
- (Animator *)animator
{
return [Animator animatorWithScreen:self.window.screen];
}
@end
我能够让其他一切正常工作,但我不确定如何使用 Swift 让 UIView 拥有 animator 属性以及如何正确翻译:
objc_setAssociatedObject(screen, &ScreenAnimationDriverKey, driver, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
【问题讨论】:
-
关于 objc_setAssociatedObject:stackoverflow.com/questions/24133058/… - 关于动画师:developer.apple.com/library/prerelease/ios/documentation/Swift/…
-
太棒了,我不知道为什么我会受到如此严重的反对,因为我只是想要一些指导方针。如果您可以将其添加为答案,我会将其设置为正确的。
标签: ios objective-c swift uiview uikit-dynamics