我正在使用Swift创建iOS应用。我发现了一个我希望在我的表视图中实现的动画,但代码是在Objective-C中。
存储库:https://github.com/recruit-mp/RMPZoomTransitionAnimator
我已成功将Obj-C代码桥接到Swift,但似乎无法符合所需的协议。
协议:
@protocol RMPZoomTransitionAnimating <NSObject>
@required
- (UIImageView *)transitionSourceImageView;
- (UIColor *)transitionSourceBackgroundColor;
- (CGRect)transitionDestinationImageViewFrame;
@end
我的Swift实施:
实现协议的第一个类:
class ChallengeViewController: UIViewController, RMPZoomTransitionAnimating
func transitionSourceImageView() -> UIImageView {
return imageView
}
func transitionSourceBackgroundColor() -> UIColor {
return UIColor.whiteColor()
}
func transitionDestinationImageViewFrame() -> CGRect {
return imageView.frame
}
第二课:
class ChallengeTableViewController: UITableViewController, RMPZoomTransitionAnimating
func transitionSourceImageView() -> UIImageView {
return imageForTransition!
}
func transitionSourceBackgroundColor() -> UIColor {
return UIColor.whiteColor()
}
func transitionDestinationImageViewFrame() -> CGRect {
return imageFrame!
}
在动画制作之前发生的此检查始终失败:
Protocol *animating = @protocol(RMPZoomTransitionAnimating);
BOOL doesNotConfirmProtocol = ![self.sourceTransition conformsToProtocol:animating] || ![self.destinationTransition conformsToProtocol:animating];
我已阅读此主题How to create class methods that conform to a protocol shared between Swift and Objective-C?,但未找到任何帮助
任何线索都会非常感激
答案 0 :(得分:0)
Swift类本身不是(默认情况下)Objective-C兼容。
您可以通过继承NSObject
或在课堂前添加@objc
来获得兼容性。我怀疑这可能&#34;可能&#34;是你的问题 - 但遗憾的是我现在无法对其进行测试。
您可能还需要添加一些初始化程序,例如NSCoder
中的一些初始化程序或者其他内容 - 我不幸地回想起我的头脑 - 我无法访问到Xcode现在。
尝试:
@objc
class ChallengeViewController: UIViewController, RMPZoomTransitionAnimating
func transitionSourceImageView() -> UIImageView {
return imageView
}
func transitionSourceBackgroundColor() -> UIColor {
return UIColor.whiteColor()
}
func transitionDestinationImageViewFrame() -> CGRect {
return imageView.frame
}
这将告诉编译器您的类是与Objective-c兼容的