4

我正在尝试使用以下代码对搜索栏的显示/隐藏进行动画处理(搜索栏应从左侧开始并在 1-2 秒内向右扩展)。但是,无论我投入多少时间,它都不会设置动画,并且会立即显示 searchBar。我注意到以下内容:

  • 不尊重持续时间
  • 甚至不尊重延迟
  • 动画没有发生。组件立即显示

    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    //code to get selected value...
    //Hide the collection view and show search bar
    
    UIView.animateWithDuration(10.0,
        delay: 0.0,
        options: UIViewAnimationOptions.TransitionCrossDissolve,
        animations: {
            self.searchBar.hidden = false
            self.searchBar.frame = CGRectMake(0, 0, 300, 44) //This doesn't work either
        },
        completion: { (finished: Bool) in
            return true
        })
    }
    

我正在使用 Xcode 7、iOS 8 和 Swift 2.0。我见过其他解决方案,但它们都不适合我。请帮助...

更新:它使用下面的代码。但是,它使用了默认动画选项UIViewAnimationOptionCurveEaseInOutTransitionNone

UIView.animateWithDuration(0.7,
                animations: {
                    self.searchBar.alpha = 1.0
                    self.searchBarRect.origin.x = self.searchBarRect.origin.x + 200
                    self.searchBar.frame = self.searchBarRect
                },
                completion: { (finished: Bool) in
                    return true
            })
4

1 回答 1

2

在 animateWithDuration 之前,将 XPosition 设置为 -200,将 YPosition 设置为 -200。

像 Daniel Suggested 一样,您还需要将 alpha 从 1.0 以外的版本更改为“淡入”。

你在使用自动布局吗?如果你是,你可能想要动画约束而不是框架。

最后,您确定您已正确连接搜索栏吗?

编辑:PS,我会将持续时间保持在 3.0 或 5.0 左右。10.0 将永远持续下去,并且可能会让您认为它没有做任何事情,因为它需要多长时间。将其设置为 3.0 或 5.0(最大值)仅用于测试,然后降低到您想要的位置。

于 2015-08-26T14:27:21.790 回答