2011-02-10 5 views
2

Я пытаюсь использовать несколько объектов в методе touchhesbegan (2 UIImageViews)Несколько объектов в touchhesbegan?

Я использую приведенный ниже код, но не работает. Нет ошибок, но местоположение просто испортилось. Что мне делать вместо этого?

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 

    if (image1.image == [UIImage imageNamed:@"ball.png"]){ 
     CGPoint location = [touch locationInView:touch.view]; 
     image1.center = location; 
    } 
    if (image1.image == [UIImage imageNamed:@"ball2.png"]){ 
     CGPoint location = [touch locationInView:touch.view]; 
     image2.center = location; 
    } 
} 

ответ

0

Я думаю, image1.image в вашем втором if состоянии необходимо image2.image, если вам нужно более коленях image1 и image2 центра. Но если вам нужно переместить изображения, вы должны выполнить следующее:

  1. Проверьте, принадлежит ли точка касания к обоим объектам.
  2. Если да, переместите оба изображения относительно (например, добавьте перемещенную сумму в предыдущий центр изображения). Не сделать точку касания как местоположение центра изображения.

Пример: Если image1 центр в точке (x1, y1) и image2 центра в точке (x2, y2). Теперь точка касания (x3, y3) принадлежит как изображению image1, так и image2. Если новое перетаскивание находится на (x4, y4), сумма перетаскивания составляет x4-x3 и y4-y3 вдоль x,y направлений соответственно. Добавьте это значение перетаскивания в центр изображения, чтобы изображение появилось в новом месте.


псевдокоде

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

    float touchXBeginPoint = [touch locationInView:touch.view].x; 
    float touchYBeginPoint = [touch locationInView:touch.view].y; 

    // Now Check touchXBeginPoint, touchYBeginPoint lies in image1, image2 
    // Calculate the offset distance. 

    if(/* both are true */) 
    { 

     // Add the offset amount to the image1, image2 center. 

    } 

    else if(/* image1 touch is true */) 
    { 
     // Add the offset amount to the image1 center 
    } 

    else if(/* image2 touch is true */) 
    { 
     // Add the offset amount to the image2 center 
    } 
} 

Скачать исходный код iPhone Game Dev главы 3 и посмотреть, как изображения перемещаются.

+0

Я просто изменил его, но я не хочу, чтобы перекрывать его. Я хочу, чтобы каждый UIImageView имел свою собственную позицию и мог одновременно перемещаться. – Rick

+0

Я действительно смущен. Точка касания всегда будет не равна обоим изображениям, поэтому я хочу ее устранить. Вот как я далеко: - (void) touchhesBegan: (NSSet *) касается событияEvent: (UIEvent *) { \t UITouch * touch = [[event allTouches] anyObject]; \t \t , если (image1.image == [UIImage imageNamed: @ "ball.png"]) { \t \t CGPoint расположение = [сенсорный locationInView: touch.view]; \t \t image1.center = location; \t} \t, если (image2.image == [UIImage imageNamed: @ "ball2.png"]) { \t \t CGPoint расположение = [сенсорный locationInView: touch.view]; \t \t image2.center = location; \t} } – Rick

2

Если вы хотите, чтобы определить, как просмотр изображений в touchesbegen попробовать этот

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event //here enable the touch  
{ 
// get touch event 


UITouch *touch = [[event allTouches] anyObject]; 

CGPoint touchLocation = [touch locationInView:self.view]; 
if (CGRectContainsPoint(image1.frame, touchLocation)) 
{ 
    NSLog(@"image1 touched"); 
    //Your logic 
} 
if (CGRectContainsPoint(image2.frame, touchLocation)) 
{ 
    NSLog(@"image2 touched"); 
      //your logic 
} 
    } 

надеюсь, что это поможет

+0

Эй, ваш код отлично работает! Но это не работает с несколькими касаниями. Мне нужно иметь возможность одновременно перетаскивать оба изображения.Вот мой код: - (void) touchhesBegan: (NSSet *) затрагивает событиеEvent: (UIEvent *) { \t \t UITouch * touch = [[событие allTouches] anyObject]; \t CGPoint touchLocation = [touch locationInView: self.view]; \t \t \t Часть 2 ниже ... – Rick

+0

если (CGRectContainsPoint (image1.frame, touchLocation)) \t \t { \t \t \t NSLog (@ "image1 прикоснулся"); \t \t \t // Ваша логика \t \t \t CGPoint место = [сенсорный locationInView: touch.view]; \t \t \t image1.center = location; \t \t} \t \t, если (CGRectContainsPoint (image2.frame, touchLocation)) \t \t { \t \t \t NSLog (@ "image2 прикоснулся"); \t \t \t // логика \t \t \t CGPoint место = [сенсорный locationInView: touch.view]; \t \t \t image2.center = location; \t \t} } – Rick

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