【问题标题】:UIDynamicAnimator/UIAttachmentBehavior jiggle?UIDynamicAnimator/UIAttachmentBehavior 抖动?
【发布时间】:2014-04-16 02:00:20
【问题描述】:

在使用 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

【问题讨论】:

    标签: ios uidynamicanimator


    【解决方案1】:

    我尝试了您的代码并且可以复制该问题。在我设置长度后,它停止了问题。

    尝试将附件的长度设置为 1

    case UIGestureRecognizerStateBegan:
         self.attachment = [[UIAttachmentBehavior alloc]initWithItem:self.cardView attachedToAnchor:touchPoint];
         self.attachment.length = 1;
         [self.animator addBehavior:self.attachment];
         break;
    

    【讨论】:

    • 做到了!多奇怪。未定义的附件长度一定会给物理引擎带来奇怪的事情。谢谢你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多