如何在图像移动时按住并拖动图像?

时间:2013-10-18 08:51:31

标签: ios xcode

以下是我随机移动图像和触摸代码的代码。

-(void)viewDidAppear:(BOOL)animated {

timer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(randomizeXandY) userInfo:nil repeats:YES];
}

-(void)randomizeXandY {

CGFloat x = (CGFloat) (arc4random() % (int) self.view.bounds.size.width);
CGFloat y = (CGFloat) (arc4random() % (int) self.view.bounds.size.height);

[self moveObjectsAtX:x Y:y];

}

-(void)moveObjectsAtX:(CGFloat)x Y:(CGFloat)y {

[UIView animateWithDuration:5 animations:^{
    imgView.center = CGPointMake(x, y);
}];

}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [[event allTouches]anyObject];
CGPoint touchLocation = [touch locationInView:self.view];

  if ([touch view] == imgView) {

      imgView.center = touchLocation;
  }

}

3 个答案:

答案 0 :(得分:1)

尝试使用touchesBegin和touchesEnded

中的代码
-(void)touchesBegin:(NSSet *)touches withEvent:(UIEvent *)event {

 // stop timers here

}   

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

 // start timers here again

}   

答案 1 :(得分:0)

您必须使用以下方法:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];

   //...
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];
    //..

}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];

   //...
}

在touchesBegan方法中,检查图像上是否有触摸:

if (CGRectContainsPoint(yourImage.frame, touchLocation)){
    dragging = YES;
}

如果是,则设置全局变量,例如将bool拖动到YES。

in touchesMoved:

检查

if (dragging){
   yourImage.frame = CGRectMake(touchLocation.x, touchLocation.y,yourImage.frame.size.widht,yourImage.frame.size.height);
}

in touchesEnded: 设置拖动到NO

拖动=否;

所以:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];

    if (CGRectContainsPoint(yourImage.frame, touchLocation)){
        dragging = YES;
        [timer invalidate];
        timer = nil;
    }
    //...
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];

    if (dragging){
        yourImage.frame = CGRectMake(touchLocation.x, touchLocation.y,yourImage.frame.size.widht,yourImage.frame.size.height);
    }
    //..

}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];

    dragging = NO;
    //...
}

答案 2 :(得分:0)

我建议使用UIPanGestureRecognizer。在它的处理方法中,您可以检查触摸的可能状态。

 -(void)handlePan:(UIPanGestureRecognizer *)recognizer {
      switch (recognizer.state) {
           case UIGestureRecognizerStateBegan: {
                CGPoint touchLocation = [recognizer locationInView:self.view];

                ...

                break;
           }

           case UIGestureRecognizerStateChanged:

                ...

                break;

           case UIGestureRecognizerStateEnded:

                ...

                break;

           default:
                break;
}