1

さて、私は UIDynamics の学習を開始し、小さなボックスでそれを解決したいと考えました。
ViewController.m で UIGravityBehaviour と UIDynamicsBehaviour を宣言し、UIView をコーディングしましたが、コードを実行すると機能しませんでした。
しかし、.h ファイルでそれらを @property として宣言したのと同じように、プログラムは完全に正常に動作していました。
その背後にある理由は何ですか?
@property として宣言する場合と、@property として宣言しない場合の違いは何ですか?

これが私のファイルです。

@プロパティを使用する前に

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end


ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIView* box = [[UIView alloc]initWithFrame:CGRectMake(100, 50, 100, 100)];
    box.backgroundColor = [UIColor blackColor];
    [self.view addSubview:box];
    UIDynamicAnimator* myAnimator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
    UIGravityBehavior* gravityBehaviour = [[UIGravityBehavior alloc] initWithItems:@[box]];
    [myAnimator addBehavior: gravityBehaviour];

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

@property として宣言した後

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (strong,nonatomic) UIDynamicAnimator* myAnimator ;
@property (strong,nonatomic) UIGravityBehavior *gravityBehavior;
@property (strong,nonatomic) UICollisionBehavior *collisionBehavior ;
@end


ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIView* box = [[UIView alloc]initWithFrame:CGRectMake(100, 50, 100, 100)];
    box.backgroundColor = [UIColor blackColor];
    [self.view addSubview:box];
    self.myAnimator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
    self.gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[box]];
    self.collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[box]];
    self.collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;
    [self.myAnimator addBehavior:self.gravityBehavior];
    [self.myAnimator addBehavior:self.collisionBehavior];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
4

2 に答える 2

2

UIGravityBehavior をプロパティに移動する必要はありません。UIDynamicAnimator を機能させるだけです。ただし、一度にすべてではなく比重ビヘイビアーを削除したい場合は、とにかく良い考えです。

于 2014-02-11T21:49:38.933 に答える