Анимация альфа-свойства при наведении курсора - PullRequest
0 голосов
/ 26 июля 2011

У меня есть коллекция из шести сидячих объектов (UIViews со свойством alpha, установленным в 0) на моем экране, и у меня есть объекты игрока, в основном расположенные поверх них.Места могут иметь или не иметь игрока на нем.Сейчас я запрограммировал событие touchesMoved на игрока, чтобы при перетаскивании игрока поверх объекта кресла альфа-свойство кресла изменялось с 0 на 0,6.И затем, продолжая перетаскивать игрока, если я перетащу его с места, свойство альфа вернется к 0.

Вместо этого есть встроенная анимация UIView, которая вместо этого может вызвать колебания свойства альфатуда-обратно между 0,6 и 0,2?Что-то вроде пульсирующего эффекта?Требуется ли для этого базовая анимация или что-то более продвинутое?

Я использую следующее в методе Player's touchesMoved, чтобы перетащить игрока и определить, находится ли он выше места:

UITouch *aTouch = [touches anyObject];
self.center = [aTouch locationInView:[self.superview]];
Seat *seat = [controller seatAtPoint:[aTouch locationInView:self.superview]];

if (seat) {
self.hoverSeat = seat;
  seat.alpha = .6;
} else {
  self.hoverSeat.alpha = 0;
}

Метод seatAtPoint в моем контроллере выглядит следующим образом:

- (Seat *) seatAtPoint:(CGPoint)point {

NSMutableArray seats = [NSMutableArray arrayWithCapacity:6];

for (int i = 1; i <= 6; i++) {
  Seat *aSeat = (Seat*)[self.view viewWithTag:i];
  [seats addObject:aSeat];
}

for (Seat *seat in seats) {
 if (CGRectContainsPoint([seat frame], point)) {
  return seat;
 }
}
return nil;
}

Я использую ivar hoverSeat, чтобы удерживать сиденье, над которым зависает игрок.И затем, если возвращаемое место равно нулю, тогда оно устанавливает альфа этого места в 0.

Ошибка, с которой я сталкиваюсь в этом коде, заключается в том, что если я перемещаю игрока по экрану слишком быстро, иногда свойство альфа выигрываетвернуться к 0. Может ли кто-нибудь придумать более эффективный способ обеспечить возврат к 0?

Спасибо за любые предложения.

1 Ответ

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

Я хотел бы изучить использование CoreAnimation;это не так сложно использовать.Вот как это может выглядеть для затухания:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:.5];
seat.alpha = 1;
[UIView commitAnimations];  

Вы можете посмотреть обратные вызовы, которые такие методы используют для создания какой-то пульсирующей анимации ( Запустить другую анимацию после первого завершения анимации (Объективный-C) ) в сочетании с условием вы, вероятно, можете настроить его на цикл навсегда.Также следует отметить, что анимации UIView отключают пользовательский ввод, когда они запущены ( Анимация с бесконечной петлей ).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...