UIAttachmentBehaviour工作不正常

时间:2016-02-19 19:26:43

标签: objective-c animation behavior

我想拖动一个UIView,让它移动附加到其上的其他视图的位置,好像它们都是通过字符串连接的。我添加了两个附加的行为,一个在我的视图之间,另一个在允许拖动的视图和锚点之间。它有效。但我的问题是,即使在手势结束后,我的观点仍在继续。我目前的结果:enter image description here 我做错了什么? 这是我的代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.views = [[NSMutableArray alloc] init];
    self.v2 = [[UIView alloc] initWithFrame:CGRectMake(50, 450, 200, 200)];
    self.v2.backgroundColor = [UIColor colorWithRed:34.0f/255.0f green:167.0f/255.0f blue:240.0f/255.0f alpha:1.0];
    [self.view addSubview:self.v2];

    self.v1 = [[UIView alloc] initWithFrame:CGRectMake(150, 450, 200, 200)];
    self.v1.backgroundColor = [UIColor colorWithRed:210.0f/255.0f green:82.0f/255.0f blue:127.0f/255.0f alpha:1.0];
    [self.view addSubview:self.v1];

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

    self.gravity = [[UIGravityBehavior alloc]initWithItems:@[self.v1, self.v2]];
    self.gravity.gravityDirection = CGVectorMake(0.0, 0.0);
    [_animator addBehavior:_gravity];

    _collision = [[UICollisionBehavior alloc]initWithItems:@[self.v1]];
    _collision.collisionDelegate = self;
    _collision.translatesReferenceBoundsIntoBoundary = YES;

    [_animator addBehavior:_collision];

    UIDynamicItemBehavior *itemBehaviour = [[UIDynamicItemBehavior alloc] initWithItems:@[self.v1]];
    itemBehaviour.elasticity = 0.6;
    itemBehaviour.allowsRotation = NO;
    [_animator addBehavior:itemBehaviour];

    UIPanGestureRecognizer *gesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    [self.v1 addGestureRecognizer:gesture];

    UIAttachmentBehavior *attach = [[UIAttachmentBehavior alloc] initWithItem:self.v2 attachedToItem:self.v1];
    attach.damping = 0.50f;
    attach.length = 150.0f;
    attach.frequency = 1.9;
    [_animator addBehavior:attach];   
}
-(void)handlePan:(UIPanGestureRecognizer *)gesture
{
    CGPoint touchPoint = [gesture locationInView:self.view];
    static float y ;
    if (gesture.state == UIGestureRecognizerStateBegan) {
        self.attachmentBehavior = [[UIAttachmentBehavior alloc] initWithItem:self.v1 attachedToAnchor:touchPoint];
            self.attachmentBehavior.damping = 0.50f;
            self.attachmentBehavior.frequency = 1.9;
        [_animator addBehavior:self.attachmentBehavior];
        y = self.v1.center.y;

    } else if (gesture.state == UIGestureRecognizerStateChanged ) {
        CGPoint center = self.v1.center;
        center.x = touchPoint.x;
        center.y = y;
        self.attachmentBehavior.anchorPoint = center;
    } else if (gesture.state == UIGestureRecognizerStateEnded) {
        [self.animator removeBehavior:self.attachmentBehavior];

    }
}

0 个答案:

没有答案