2013-10-12 3 views
0

В общем, этот код в данный момент выполняется, перетаскивая изображение вверх и вниз по оси Y в зависимости от того, где пользователь перетаскивает его, и он возвращается в исходное положение. Моя проблема заключается в том, что если кто-то не должен касаться непосредственно центра UIImageView и начать перетаскивание, он будет трясеть (очень негладкий). Везде, где кто-то прикасается к UIImageView и начинает перетаскивать толчки UIImageView немного, чтобы перейти непосредственно в центр сенсорного события.UIImageView перескакивает, когда происходит событие Touch Event

Я думал об использовании анимации, просто чтобы переместить ее туда, где должно быть изображение, или есть другой способ?

Прошу прощения, если это неэффективный способ сделать это. Я довольно новичок в мире IOS.

Вот что у меня есть:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    //Gets location of UIImageView. 
    self.originalFrame = self.foregroundImage.frame; 
} 
//This method is used for moving the UIImageView along the y axis depending on touch events. 
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [[event allTouches] anyObject]; 
    if([touch view]==self.foregroundImage) { 
     CGPoint location = [touch locationInView:self.view]; 
     location.x=self.foregroundImage.center.x; 
     self.foregroundImage.center=location; 
    } 
} 
//This method sets the UIImageView back to its original position. 
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    CGRect newFrame = self.foregroundImage.frame; 
    newFrame.origin.y = self.originalFrame.origin.y; 
    [UIView animateWithDuration:1.1 animations:^{ 
     self.foregroundImage.frame = newFrame; 
    }]; 
} 

ответ

1

Кроме того, необходимо, чтобы сохранить первое место в touchesBegan, относительно родительского вида. Затем вы можете использовать это, чтобы изменить кадр на разницу между предыдущим местоположением и новым местоположением. См. Следующий код.

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

- (void) touchesMoved: (NSSet*) touches 
      withEvent: (UIEvent*) event 
{ 
    if (touches.count == 1) 
    { 
    UITouch* touch = [touches anyObject]; 
    CGPoint newTouchLocation = [touch locationInView: self.view]; 

    if (touch.view == self.foregroundImage) 
    { 
     /* Determine the difference between the last touch locations */ 
     CGFloat deltaX = newTouchLocation.x - self.touchLocation.x; 
     CGFloat deltaY = newTouchLocation.y - self.touchLocation.y; 

     /* Offset the foreground image */ 
     self.foregroundImage.center 
     = CGPointMake(self.foregroundImage.center.x + deltaX, 
         self.foregroundImage.center.y + deltaY); 
    } 

    /* Keep track of the new touch location */ 
    self.touchLocation = newTouchLocation; 
    } 
} 
+0

спасибо! Я вижу это сейчас. Это именно то, чего я хотел. Еще раз спасибо! – user2873147

Смежные вопросы