ios - 悬停时动画 alpha 属性

标签 ios xcode animation uiview

我的屏幕上有六个座位对象(alpha 属性设置为 0 的 UIView)的集合,我基本上将玩家对象放在它们上面。座位上可能有也可能没有球员。我现在所拥有的是我已经对玩家的 touchesMoved 事件进行了编程,这样当我将玩家拖到座位对象顶部时,座位的 alpha 属性将从 0 变为 0.6。然后在拖动玩家的同时,如果我将他从座位上拖下来,alpha 属性将回到 0。

相反,是否有一个内置的 UIView 动画可以导致 alpha 属性在 .6 和 .2 之间来回波动?有点跳动的效果?这需要核心动画还是更高级的东西?

我在 Player 的 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;
}

我 Controller 中的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;
}

我使用 hoverSeat ivar 来固定玩家悬停在其上方的座位。然后,如果返回的座位为 nil,则将该座位的 alpha 设置为 0。

我在这段代码中看到的一个错误是,如果我在屏幕上移动播放器的速度有点太快,有时 alpha 属性不会回到 0。谁能想出更有效的方法来确保它继续回到0?

感谢您的任何建议。

最佳答案

我会考虑使用 CoreAnimation;使用起来并不难。这是淡入淡出的样子:

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

您可以查看此类方法用于创建某种脉冲动画 (Trigerring other animation after first ending Animation (Objetive-C)) 的回调,并结合您可能可以将其设置为永远循环的条件。另外值得注意的是,UIView 动画在运行时会禁用用户输入 (Infinitely looping animation)。

至于你提到的错误,如果它仍然发生,你可以设置一个计时器,当它被触发时,遍历所有的座位并检查没有正确显示的座位。您可能希望将此间隔设置得很少,这样它就不会中断或影响其他动画的性能。

关于ios - 悬停时动画 alpha 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6824296/

相关文章:

iphone - 'tochesBegan' 和 'touchesMoved' 之间的延迟

android - 如何动画右刻度线

python - 使用 matplotlib 'format "rgba 的动画“不支持”

ios - 图像尺寸太大时 Tableview 单元格抖动

ios - 子类化 UITableViewCell 不允许多个单元格标签

ios - 导航栏中的背景图像转到屏幕顶部

ios - UIToolBar 栏按钮项目不使用 Swift 显示

python - Matplotlib error Line2d object s not iterable error in tkinter callback nothing shows up

ios - 从 iTunes URL 字符串获取应用程序的 ID 号

ios - 在启用分页的情况下使两个 UICollectionView 同步滚动