2

Xcode 5.1.1 を使用して iOS7 の新しい物理エンジンを操作しているときに、次のコードを書きました。

#import "ZViewController.h"

@interface ZViewController ()
@property (nonatomic, strong) UIView *cardView;
@property (nonatomic, strong) UIDynamicAnimator *animator;
@property (nonatomic, strong) UIAttachmentBehavior *attachment;
@end

@implementation ZViewController

- (void)viewDidLoad{
    [super viewDidLoad];

    self.cardView = [[UIView alloc]initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)];
    self.cardView.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview:self.cardView];

    UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGestureHandler:)];
    [self.cardView addGestureRecognizer:panGestureRecognizer];

    self.animator = [[UIDynamicAnimator alloc]initWithReferenceView:self.view];
}

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];

    self.cardView.center = self.view.center;
}

- (void)panGestureHandler:(UIPanGestureRecognizer *)panGesture{
    CGPoint touchPoint = [panGesture locationInView:self.view];
    switch(panGesture.state){
        case UIGestureRecognizerStateBegan:
            self.attachment = [[UIAttachmentBehavior alloc]initWithItem:self.cardView attachedToAnchor:touchPoint];
            [self.animator addBehavior:self.attachment];
            break;
        case UIGestureRecognizerStateChanged:
            touchPoint.x = 160.0;
            self.attachment.anchorPoint = touchPoint;
            break;
        case UIGestureRecognizerStateEnded:
            [self.animator removeBehavior:self.attachment];
            self.attachment = nil;
            break;
        default:
            break;
    }
}

@end

このコードをテストしていたときに、非常に奇妙なウィグル/ジグルを発見しました。ほとんどの場合、cardView を上下にドラッグすると、予想どおりの動作が行われます。つまり、cardView は x 軸を中心に上下にスライドしますが、ときどき cardView が左斜めに移動し、x 軸中心に斜めに戻ります。この小刻みは常に発生しているようには見えませんが、常に左に小刻みに動いているように見えます。

誰もこれを見たことがありますか?これを引き起こす原因は何ですか?それを止める方法は?

よろしくお願いします - AYAL

4

1 に答える 1

2

あなたのコードを試してみたところ、問題を再現できました。長さを設定した後、問題は停止しました。

添付ファイルの長さを 1 に設定してみてください

case UIGestureRecognizerStateBegan:
     self.attachment = [[UIAttachmentBehavior alloc]initWithItem:self.cardView attachedToAnchor:touchPoint];
     self.attachment.length = 1;
     [self.animator addBehavior:self.attachment];
     break;
于 2014-04-16T02:12:47.027 に答える