在下面的委托函数中我试图做,但没有得到理想的结果 override func didUpdateFocusInContext(context: UIFocusUpdateContext,withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) { if (context.nextFocusedView == s
override func didUpdateFocusInContext(context: UIFocusUpdateContext,withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) { if (context.nextFocusedView == self) { coordinator.addCoordinatedAnimations({ () -> Void in self.animationDidStop(CAAnimation(), finished: true) }, completion: { () -> Void in }) } else { // handle unfocused appearance changes coordinator.addCoordinatedAnimations({ () -> Void in self.animationDidStop(CAAnimation(), finished: true) }, completion: { () -> Void in }) } context.nextFocusedView?.layer.shadowOffset = CGSizeZero context.nextFocusedView?.layer.shadowOpacity = 0.9; context.nextFocusedView?.layer.shadowRadius = 0; context.nextFocusedView?.layer.shadowColor= UIColor.orangeColor().CGColor context.previouslyFocusedView?.layer.shadowOpacity = 0; }首先,您必须将按钮类型设置为自定义类型.通过自定义类型,您将不再获得系统动画,因此您必须自己完成所有动画.
然后,您可以在UIViewController中实现didUpdateFocusInContext方法,或者如果单个屏幕上有更多按钮类型,您可以创建自己的UIButton子类.
这是我在UIButton子类中使用的代码.这将提供按钮放大以及焦点上的红色边框,并将在焦点丢失时达到正常状态.
let scale = 1.1 layer.borderColor = UIColor.redColor().CGColor override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) { if context.nextFocusedView == self { coordinator.addCoordinatedAnimations({ () -> Void in self.transform = CGAffineTransformMakeScale(scale, scale) self.layer.borderWidth = 2 }, completion: nil) } else { coordinator.addCoordinatedAnimations({ () -> Void in self.transform = CGAffineTransformIdentity self.layer.borderWidth = 0 }, completion: nil) } }