CAShapeLayer Class 创建
CAShapeLayer Class Creation
我发现了一个用 Swift 编写的很棒的教程,用于在我的应用程序打开时创建动画。它是用 Swift 编写的,所以我正在 Objective-C 为我正在进行的项目对其进行验证,但我 运行 在添加动画时遇到了一些麻烦。 Swift 有效,但我无法弄清楚我的 Objective-C 版本有什么问题。
Creating a Complex Loading Animation in Swift
Swift CAShapeLayer 的版本 Class:
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 化版本。
Swift版本:
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存根。该文件在构建输出(派生数据等)中生成。根据上面的示例 link.
,您需要将该文件导入到您的 Ojb-C 代码中
#import "ProductModuleName-Swift.h"
我发现了一个用 Swift 编写的很棒的教程,用于在我的应用程序打开时创建动画。它是用 Swift 编写的,所以我正在 Objective-C 为我正在进行的项目对其进行验证,但我 运行 在添加动画时遇到了一些麻烦。 Swift 有效,但我无法弄清楚我的 Objective-C 版本有什么问题。
Creating a Complex Loading Animation in Swift
Swift CAShapeLayer 的版本 Class:
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 化版本。
Swift版本:
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存根。该文件在构建输出(派生数据等)中生成。根据上面的示例 link.
,您需要将该文件导入到您的 Ojb-C 代码中#import "ProductModuleName-Swift.h"