2012-06-01 3 views
1

Мне интересно, если у вас есть пример кода, добавляющий и перемещающий UIImageView прикосновением, а также обнаружение там, где есть UIImageView, поэтому я не могу добавить UIImageView поверх него.как добавить на ощупь и обнаружить UIImageView на виду, чтобы я мог перемещать его и не добавлять его поверх него?

EDIT: более четкий вопрос 1. Я хочу добавить чашки (UIImageView), когда я касаюсь вида, но не хочу, чтобы чашка (UIImageView) складывалась.

  1. Я хочу переместить UIImageView, но вернется в исходное положение, если там есть UIImageView, поэтому он не будет складывать UIImageView уже там.

спасибо за чтение моего вопроса и оценили ваш помогает

приветствий

дез

ответ

1

Это должно позволить вам идти ...

Создайте два Ивар в файле заголовка:

UIImageView *myImageView1; 
UIImageView *myImageView2; 

Следующие два метода будут в файле реализации:

-(void)initImagesAndPanGesture 
{ 
    UIImage *img = [UIImage imageNamed:@"image1.png"]; 
    myImageView1 = [[UIImageView alloc]initWithImage:img]; 
    [myImageView1 setFrame:CGRectMake(300, 800, 100, 100)]; 
    [myImageView1 setUserInteractionEnabled:YES]; 
    UIPanGestureRecognizer *recognizer1 = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan1:)]; 
    [myImageView1 addGestureRecognizer:recognizer1]; 
    [self.view addSubview:myImageView1]; 

    img = [UIImage imageNamed:@"image2.png"]; 
    myImageView2 = [[UIImageView alloc]initWithImage:img]; 
    [myImageView2 setFrame:CGRectMake(500, 800, 100, 100)]; 
    [myImageView2 setUserInteractionEnabled:YES]; 
    recognizer1 = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan1:)]; 
    [myImageView2 addGestureRecognizer:recognizer1]; 
    [self.view addSubview:myImageView2]; 
} 

-(void)handlePan1:(UIPanGestureRecognizer *)recognizer 
{ 
    if (!(CGRectIntersectsRect(myImageView1.frame, myImageView2.frame))) 
    { 
     CGPoint translation = [recognizer translationInView:self.view]; 
     recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, 
             recognizer.view.center.y + translation.y); 

     [recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; 
    } 
    else 
    { 
     NSLog(@"intersect!"); 
    } 
} 
2

Вы можете добавить UIPanGestureRecognizer в UIImageView, чтобы справиться с увлекая, как показано ниже.

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)]; 
[panRecognizer setMinimumNumberOfTouches:1]; 
[panRecognizer setMaximumNumberOfTouches:1]; 
[panRecognizer setDelegate:self]; 
[imageView addGestureRecognizer:panRecognizer]; 

Реализовать следующий метод:

-(void)move:(id)sender { 

    CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self.view]; 

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) { 
     firstX = [[sender view] center].x; 
    firstY = [[sender view] center].y; 
    } 
    translatedPoint = CGPointMake(firstX+translatedPoint.x, firstY+translatedPoint.y); 
    [[sender view] setCenter:translatedPoint]; 

    } 

В сочетании с выше, вы можете использовать CGRectIntersectsRect найти, если это пересекающая другую чашку.

BOOL isIntersecting = CGRectIntersectsRect ([cup1 frame],[cup2 frame]); 

Вы должны обернуть функциональности принимать во внимание все ваши чашки, но это дает вам представление а до, как сделать то, что вы пытаетесь сделать.

+0

Если кто-то может форматировать мой пост для меня был бы очень признателен, поскольку я сделал это с моего телефона. – skram

+0

Я просто сделал. Надеюсь, это сработало. – user523234

+0

привет Скраму, спасибо за код. я хотел бы проверить, есть ли там вид, прежде чем добавлять напиток при прикосновении. Как я могу это сделать ? – Desmond