Swift を使用して NSObject クラスで UIDynamicAnimator を使用して動的な動作を行うカスタム アラートビューを作成しようとしています。UISnapBehaviour を NSObject クラスの init メソッドのスナップ動作のビューに追加している間、動作しません。たとえば、以下のコードを見てください。
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の中心にスナップします。迅速なコードの何が問題なのかわかりません。
これが私が試したことです:
- UIViewController クラスでコーディングすると、動的効果が正常に機能します。問題は、NSObject を迅速にサブクラス化するときにのみ存在します。
- UIGravityBehavior などの他の動的動作を試しましたが、同じ問題が迅速に存在します。
- ObjectiveC オブジェクト クラスで同じサンプル作業を行ったところ、正常に動作しました。動作する ObjC コードも添付しました。
問題はinitメソッドに存在する可能性があるか、変数宣言がそれについて確信が持てないようですが、私はその問題を修正する方法がわかりません。私はインターネットで多くの記事を読みました。StackOverflow も検索しました。助けてください。