我正在尝试使用 swift 在 NSObject 类中使用 UIDynamicAnimator 创建具有动态行为的自定义警报视图,而将 UISnapBehaviour 添加到 NSObject 类初始化方法中的视图捕捉行为不起作用,例如查看下面的代码
import UIKit
class DynamicBehaviour: NSObject {
var Animator:UIDynamicAnimator!
var TargetView:UIView!
var TestView:UIView!
override init() {
super.init()
}
init(SourceViews:UIView) {
super.init()
TestView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
TestView.backgroundColor = UIColor.blueColor()
TargetView.addSubview(TestView)
Animator = UIDynamicAnimator(referenceView: TargetView)
let snapBehavior: UISnapBehavior = UISnapBehavior(item: TestView, snapToPoint: TargetView.center)
Animator.addBehavior(snapBehavior)
}
}
“TestView”作为子视图添加到“Target”,但捕捉行为不起作用。
我在 ObjectiveC 中尝试了相同的代码
#import "DynamicBehaviour.h"
#import <UIKit/UIKit.h>
@interface DynamicBehaviour ()
@property(nonatomic,strong)UISnapBehavior * Snap_behaviour;
@property (nonatomic,strong)UIDynamicAnimator * Animator;
@end
@implementation DynamicBehaviour
-(instancetype)initWithSourceView:(UIView *)TargetView{
if (self = [super init]) {
UIView * TestView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
TestView.backgroundColor = [UIColor blueColor];
[TargetView addSubview:TestView];
self.Animator = [[UIDynamicAnimator alloc]initWithReferenceView:TargetView];
self.Snap_behaviour = [[UISnapBehavior alloc]initWithItem:TestView snapToPoint:TargetView.center];
[self.Animator addBehavior:self.Snap_behaviour];
}
return self;
}
@end
它工作正常,“TestView”捕捉到 TargetView 的中心。我不知道 swift 代码有什么问题。
这是我尝试过的:
- 在 UIViewController 类中编码时动态效果工作正常,问题仅在 swift 中子类化 NSObject 时存在。
- 我已经尝试过其他动态行为,例如 UIGravityBehavior,同样的问题也存在于 swift 中。
- 在 ObjectiveC 对象类中完成了相同的示例工作,它工作正常,我也附上了工作的 ObjC 代码。
似乎问题可能存在于 init 方法或变量 decleration 不确定但是,我不知道如何解决该问题。我已经阅读了互联网上的许多文章。我也搜索过 StackOverflow。请帮忙。