У меня есть коллекция из шести сидячих объектов (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?
Спасибо за любые предложения.