2

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の中心にスナップします。迅速なコードの何が問題なのかわかりません。

これが私が試したことです:

  1. UIViewController クラスでコーディングすると、動的効果が正常に機能します。問題は、NSObject を迅速にサブクラス化するときにのみ存在します。
  2. UIGravityBehavior などの他の動的動作を試しましたが、同じ問題が迅速に存在します。
  3. ObjectiveC オブジェクト クラスで同じサンプル作業を行ったところ、正常に動作しました。動作する ObjC コードも添付しました。

問題はinitメソッドに存在する可能性があるか、変数宣言がそれについて確信が持てないようですが、私はその問題を修正する方法がわかりません。私はインターネットで多くの記事を読みました。StackOverflow も検索しました。助けてください。

4

1 に答える 1