【问题标题】:tvOS: UIMotionEffect for UIButton without bounce back when swipetvOS:UIButton 的 UIMotionEffect 滑动时不会反弹
【发布时间】:2016-02-01 16:09:28
【问题描述】:

我正在开发一个注册页面,其中一个按钮是可聚焦的,我将UIMotionEffect 应用到它。

我的按钮声明:

private lazy var requestTokenButton: UIButton = {
    let button = UIButton()
    button.titleLabel?.font = UIFont(name: ThemeManager.sharedTheme.commonFontRegular, size: 22)
    button.setTitle("Get a New Code", forState: .Normal)
    button.setTitleColor(UIColor.blackColor(), forState: .Normal)
    button.backgroundColor = ThemeManager.sharedTheme.yellowColor
    button.addTarget(self, action: "requestNewToken", forControlEvents: .PrimaryActionTriggered)
    return button
}()

我正在使用Cartography 进行程序化自动布局:

constrain(self.requestTokenButton, self.registrationMoreInfoLabel) { view1, view2 in
    view1.leading == view2.leading
    view1.top == view2.bottom + 30
    view1.height == 65
    view1.width == 400
}

这是我的applyMotionEffect()

private func applyMotionEffect() {
    let yRotationMotionEffect = UIInterpolatingMotionEffect(keyPath: "layer.transform", type: .TiltAlongHorizontalAxis)
    let yMovementMotionEffect = UIInterpolatingMotionEffect(keyPath: "center.y", type: .TiltAlongVerticalAxis)

    let m34 = CGFloat(-1.0 / 3000)
    let angle = CGFloat(20 * M_PI / 180.0)

    var baseTransform = CATransform3DIdentity
    baseTransform.m34 = m34

    var rotateYmin = baseTransform
    rotateYmin = CATransform3DRotate(rotateYmin, angle, 0.0, 1.0, 0.0);

    var rotateYmax = baseTransform
    rotateYmax = CATransform3DRotate(rotateYmax, -1 * angle, 0.0, 1.0, 0.0);

    yRotationMotionEffect.minimumRelativeValue = NSValue(CATransform3D: rotateYmin)
    yRotationMotionEffect.maximumRelativeValue = NSValue(CATransform3D: rotateYmax)


    self.requestTokenButton.addMotionEffect(yRotationMotionEffect)
    self.requestTokenButton.addMotionEffect(yMovementMotionEffect)
}

这是我的问题:当我从遥控器滑动时,按钮在旋转到角度限制CGFloat(20 * M_PI / 180.0) 后立即弹回。有没有办法旋转按钮而不会反弹或减少我的手指在电视遥控器上移动的每一点的旋转角度。

【问题讨论】:

    标签: swift uibutton tvos uimotioneffect


    【解决方案1】:

    我最终将UIImageView 添加到UIButtonUIImageView.adjustsImageWhenAncestorFocused = true

    需要提一下的是,当只有一个 UI 元素是可聚焦的时,你最好不要使用:

    weak override var preferredFocusedView: UIView? 
    

    这给了我一种奇怪的反弹效果,因为我只有一个可聚焦的 UI 元素,所以焦点无法移动。它总是调用preferredFocusedView 并强制焦点回到UIButton 的中心

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多