Я нашел фантастический учебник, написанный в Swift для создания анимации при открытии моего приложения. Это написано в Swift, поэтому я Objective-C-ifying для проекта, над которым я работаю, но у меня возникают небольшие проблемы с добавлением моей анимации. Swift работает, но я не могу понять, что случилось с моей версией Objective-C.
Создание сложной анимации загрузки в Swift
Быстрая версия класса CAShapeLayer:
func expand() {
var expandAnimation: CABasicAnimation = CABasicAnimation(keyPath: "path")
expandAnimation.fromValue = ovalPathSmall.CGPath
expandAnimation.toValue = ovalPathLarge.CGPath
expandAnimation.duration = animationDuration
expandAnimation.fillMode = kCAFillModeForwards
expandAnimation.removedOnCompletion = false
// the following line I'm having trouble converting to Objective-C
addAnimation(expandAnimation, forKey: nil)
}
Версия Objective-C:
- (void)expand {
CABasicAnimation *expandAnimation = [CABasicAnimation animationWithKeyPath:@"path"];
expandAnimation.fromValue = (__bridge id)(_ovalPathSmall.CGPath);
expandAnimation.toValue = (__bridge id)(_ovalPathSquishHorizontal.CGPath);
expandAnimation.duration = self.animationDuration;
expandAnimation.fillMode = kCAFillModeForwards;
expandAnimation.removedOnCompletion = NO;
// I can't figure out how to "convert" this to Objective-C
// addAnimation(expandAnimation, forKey: nil)
}
Инициализаторы:
Я подозреваю, что я что-то делаю с инициализатором, поэтому здесь приведен код для рабочей Swift и моей Objective-C-ified версии ниже.
Быстрая версия:
let animationDuration: CFTimeInterval = 0.3
override init!() {
super.init()
fillColor = Colors.red.CGColor
path = ovalPathSmall.CGPath
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
Версия Objective-C:
Это моя попытка подражать инициализатору в моем файле .m
:
- (instancetype)init
{
self = [super init];
if (self) {
self.animationDuration = 0.3;
self.fillColor = [UIColor redColor].CGColor;
self.path = self.ovalPathSmall.CGPath;
}
return self;
}
Спасибо за чтение, и я приветствую ваш вклад.
Чтобы ответить на ваш ближайший вопрос, я думаю, вам просто нужно [self addAnimation...], но я не знаю, что вы пробовали.
Чтобы ответить на ваш комментарий, хотя, по крайней мере, на данный момент, это довольно легко. См. Раздел смешивания и соответствия: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_78.
Краткая версия заключается в том, что компилятор Swift запускается первым и генерирует Obj-C-заглушки, которые компилятор Obj-C может понять в одном файле заголовка на основе вашего имени проекта. Этот файл создается на выходе сборки (Derived Data и т.д.). Вам необходимо импортировать этот файл в свой код Ojb-C, например, в приведенной выше ссылке.
#import "ProductModuleName-Swift.h"