Анимированный UIImageView, который должен распознавать нажатия на него (в любом месте, где находится UIImageView) - PullRequest
1 голос
/ 21 февраля 2011

Я создаю приложение для iPhone, которое включает в себя всплывающие подсказки (UIImageViews) из нижней части экрана и перемещения к верхней части экрана.

Цель состоит в том, чтобы настроить UIImageViews таким образом, чтобы жест касания на шарике приводил к удалению шариков с экрана.

Я настроил GestureRecognizer, и касания распознаются.

Проблема, с которой я сталкиваюсь, заключается в том, что используемый мной метод анимации не предоставляет информацию о том, где воздушный шар рисуется в конкретный момент времени, и обрабатывает его как уже достигнутый конечный момент, о котором говорилось.

Это вызывает проблему распознавания касаний только в верхней части экрана (который является конечным пунктом назначения аэростата).

Я вставил свой код для анимации здесь:

UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState|UIViewAnimationOptionAllowUserInteraction;
[UIView animateWithDuration:2.0 delay:0.0 options:options animations:^{ 
balloonImageView.center = p;
} completion:^(BOOL finished) {
if (finished) {
  balloonImageView.hidden= TRUE;
  balloonImageView.image=nil;
}

Я отслеживаю, где находится изображение, присваивая уникальный тег UIImageView и проверяя, если gest.view.tag = anyBalloonObject.tag и удаляет ли я шарик.

Мой основной вопрос: есть ли другой инструмент анимации, который я могу использовать? Я понимаю, что могу установить конечную точку аэростата немного выше, чем на экране, пока он не достигнет вершины, но кажется, что это очень обременительно для памяти. У вас есть какие-нибудь рекомендации? Я просмотрел справочник по Core Animation и не нашел методов, подходящих для моих нужд.

Кроме того, многопоточность UIViewAnimation повлияет на точность системы ответвлений?

Спасибо,

Vik

1 Ответ

1 голос
/ 09 апреля 2011

Вы не должны анимировать игровые объекты (объекты, с которыми вы взаимодействуете во время их движения). Для перемещения баллонов лучше использовать NSTimer.

-(void)viewDidLoad {

//Set up a timer to run the update-function
timer =  [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(update) userInfo:NULL repeats:YES];

}


-(void) update {

for (int i = [balloonArray count] - 1; i >= 0; i--) { //Loop through an array containing all your balloons.


    UIImageView *aBalloon = [balloonArray objectAtIndex:i]; //Select balloon at the current loop index

    aBallon.center = CGPointMake(aBallon.center.x, aBalloon.center.y + 1); //Change the center of that balloon, in this case: make it go upwards.



}
}

Вот что вам нужно объявить в .h:

NSTimer *timer;
NSMutableArray *ballonArray;
//You should use properties on these also..

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

  //You need an excact copy of the loop from earlier around this if statement!
  If (CGRectContainsPoint(aBalloon.frame, touchlocation)) { //you can do your own tap detection here inthe if-statement
   //pop the balloon and remove it from the array!
    }

Надеюсь, это не слишком страшно, удачи.

...