Как определить, что изображение коснулось - PullRequest
9 голосов
/ 05 июля 2011

Как вы можете обнаружить, если изображение коснулось в Xcode?Я посмотрел на документацию Apple, и это действительно сбивает с толку ... Я видел:

if (CGRectContainsPoint([imageView frame], location))

, но мое изображение все еще не будет двигаться.Я попытался с помощью touchesBegan + touchesMoved и установил для userInteractionIsEnabled изображения значение YES, но он все равно его не обнаружил: (*


EDIT: Большое вам спасибо за ваш большойпредложения! В конце концов, я действительно хотел сделать его как можно более простым, и я знал, что мой код должен работать, поэтому я продолжал возиться с ним, и после хорошего ночного сна я понял, что этодовольно простое решение:

В моих прикосновениях установлено:

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

    CGRect shapeRect = [imageView frame];
    CGRect dropSquareRect = [dropSquare frame];

    CGPoint touchLocation = CGPointMake(location.x, location.y);

    if (CGRectContainsPoint(shapeRect, touchLocation))
    {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:.3];
        [imageView setCenter:touchLocation];
        [UIView commitAnimations];
    }

    if (CGRectIntersectsRect(shapeRect, dropSquareRect))
    {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:.3];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
        self.imageView.alpha = 0;
        self.imageView.center = CGPointMake(dropSquare.center.x, dropSquare.center.y);
        self.imageView.transform = CGAffineTransformMakeScale(0.8, 0.8);
        [UIView commitAnimations];

Ответы [ 6 ]

13 голосов
/ 05 июля 2011

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

И также не забудьте установить userInteractionIsEnabled на YES.

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self              action:@selector(imageTapped:)];
myImageView.userInteractionIsEnabled = YES;
[myImageView addGestureRecognizer:tap];
[tap release];

Реализация imageTapped: метод.

- (void )imageTapped:(UITapGestureRecognizer *) gestureRecognizer 
   {

   }
3 голосов
/ 05 июля 2011

Вы можете попробовать это. Предположим, у вас есть

IBOutlet UIImageView *touchImageVIew;
Let touchImageVIew height and width are 50,25;

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
    // Retrieve the touch point

    CGPoint pt = [[touches anyObject] locationInView:touchImageVIew];

    if (pt.x>=0 && pt.x<=50 && pt.y>=0 && pt.y<=25) {
        NSLog(@"image touched");
    }

    else 
{
NSLog(@"image not touched");
}
}

Настройка высоты, ширины и имени в соответствии с вашими требованиями.

3 голосов
/ 05 июля 2011

Вам нужен метод touchesBegan, например,

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint myPoint = [touch locationInView:self];
   if (CGRectContainsPoint([imageView frame], location)){
    // code here             
   }
}

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

3 голосов
/ 05 июля 2011

Вы можете добавить UIPanGesureRecognizer в UIImageView, который содержит UIImage. Это позволит вам определить, когда пользователь выполняет панорамирование изображения, и соответственно переместить перевод изображений. Ссылка на документацию здесь.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIPanGestureRecognizer_Class/Reference/Reference.html

Приятно использовать распознаватели жестов, поскольку они сохраняют согласованность с остальной частью ОС в отношении панорамирования.

Надеюсь, это поможет.

2 голосов
/ 05 июля 2011

Если вы не особенно внимательны в использовании UIImageView, попробуйте использовать пользовательскую кнопку с изображением в нем и использовать методы действий touchDown и touchDraggedOut для перемещения изображения.

2 голосов
/ 05 июля 2011

Вы можете использовать это:

Выполните следующие настройки в загрузке:

UISwipeGestureRecognizer *rightRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightSwipeHandle:)];
rightRecognizer.direction = UISwipeGestureRecognizerDirectionRight;
[rightRecognizer setNumberOfTouchesRequired:1];
[mainSlideShowImageScrollView addGestureRecognizer:rightRecognizer];
[rightRecognizer release];
UISwipeGestureRecognizer *leftRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(leftSwipeHandle:)];
leftRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
[leftRecognizer setNumberOfTouchesRequired:1];
[mainSlideShowImageScrollView addGestureRecognizer:leftRecognizer];
[leftRecognizer release];   

Затем используйте следующие методы:

- (void)rightSwipeHandle:(UISwipeGestureRecognizer*)gestureRecognizer 
   {
      //Do moving
   }

- (void)leftSwipeHandle:(UISwipeGestureRecognizer*)gestureRecognizer 
  {
      // do moving
  }
...