快速下拉列表

Haz*_*zem 8 xcode animation ios swift

我正在开发一个iPhone应用程序,它在我单击栏按钮时出现的导航栏下面有一个过滤器列表(下拉列表).请建议我怎么做.

在此输入图像描述

Ell*_*nns 25

有很多方法可以做到,我的建议类似于以下内容:

初始化视图控制器时,下拉视图会偏移并隐藏在导航栏后面.使用布局约束或使用视图的框架执行此操作,具体取决于您的首选设置.

var isAnimating: Bool = false
var dropDownViewIsDisplayed: Bool = false

func viewDidLoad() {
    super.viewDidLoad()
    let height: CGFloat = self.dropDownView.frame.size.height
    let width: CGFloat = self.dropDownView.frame.size.width
    self.dropDownView.frame = CGRectMake(0, -height, width, height)
    self.dropDownViewIsDisplayed = false
}
Run Code Online (Sandbox Code Playgroud)

然后将一个动作链接到BarButtonItem,当按下该按钮时,如果隐藏则显示视图,或者如果使用动画可见则隐藏该视图.

@IBAction func barButtonItemPressed(sender: UIBarButtonItem?) {
    if (self.dropDownViewIsDisplayed) {
        self.hideDropDownView()
    } else {
        self.showDropDownView()
    }
}

func hideDropDownView() {
     var frame: CGRect = self.dropDownView.frame
     frame.origin.y = -frame.size.height
     self.animateDropDownToFrame(frame) {
         self.dropDownViewIsDisplayed = false
     }
}

func showDropDownView() {
    CGRect frame = self.dropDownView.frame
    frame.origin.y = self.navigationBar.frame.size.height
    self.animateDropDownToFrame(frame) {
        self.dropDownViewIsDisplayed = true
    }
}

func animateDropDownToFrame(frame: CGRect, completion:() -> Void) {
    if (!self.animating) {
        self.animating = true
        UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseInOut, animations: { () -> Void in
            self.dropDownView.frame = frame
            }, completion: (completed: Bool) -> Void in {
                self.animating = false
                if (completed) {
                     completion()
                }
            })
    }
}
Run Code Online (Sandbox Code Playgroud)

剩下的就是定义你的dropDownView并正确链接它.

我希望有所帮助,如果您有任何不明白的地方,请发表评论