Создание класса CAShapeLayer

0

Я нашел фантастический учебник, написанный в 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;
}

Спасибо за чтение, и я приветствую ваш вклад.

  • 1
    Рассматривали ли вы оставить это быстро, просто с помощью взаимодействия? На этом этапе все дороги ведут к Свифту, в итоге вы можете помочь себе, выполнив меньше работы.
  • 0
    На данный момент, я просто хочу сделать этот стартовый экран и завершить проект;) Можете ли вы указать мне на пост о том, как включить Swift в проект Objective-C? Все, что я видел, идет другим путем. Я собираюсь все-Swift все время идти вперед, теперь, когда они на 2.0.
Теги:
animation
cashapelayer
cabasicanimation

1 ответ

1
Лучший ответ

Чтобы ответить на ваш ближайший вопрос, я думаю, вам просто нужно [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"
  • 0
    Спасибо! Я кое-что узнал здесь, так что разочарование того стоило;)
  • 0
    Твой пост и этот перевел меня на финишную черту! stackoverflow.com/questions/24206732/...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню