我正在iOS应用中实现一个用户表单,该用户表单同时使用UIPickerView
和UIDatePicker
作为用户的输入设备。我已经将这些中的每个实现为场景中主UIViewController外部的视图,并通过添加和删除约束使用autolayout
显示和隐藏它们。
这是我的问题:我正在维护单独的约束并隐藏/显示方法,以便为这些视图中的每一个进行动画制作。这是很多重复代码,我觉得必须有一个更简洁的方法来做到这一点,因为它似乎是iOS应用程序中非常常见的设计模式。我对此很新,所以我觉得我错过了什么。
对于将多个输入设备用于UIButtons,有没有比这更好的设计模式?
以下是我用来维护此代码的代码示例......
var datePickerViewBottomConstraint: NSLayoutConstraint!
var datePickerViewTopConstraint: NSLayoutConstraint!
var storagePickerViewBottomConstraint: NSLayoutConstraint!
var storagePickerViewTopConstraint: NSLayoutConstraint!
@IBAction func storageButtonClicked(sender: UITextField) {
storagePickerView.translatesAutoresizingMaskIntoConstraints = false
storagePickerViewBottomConstraint = storagePickerView.bottomAnchor.constraintEqualToAnchor(view.bottomAnchor)
UIView.animateWithDuration(0.4, animations: {
self.storagePickerViewTopConstraint.active = false
self.storagePickerViewBottomConstraint.active = true
self.view.layoutIfNeeded()
})
}
@IBAction func datePumpedClicked(sender: UIButton) {
datePickerView.translatesAutoresizingMaskIntoConstraints = false
datePickerViewBottomConstraint = datePickerView.bottomAnchor.constraintEqualToAnchor(view.bottomAnchor)
UIView.animateWithDuration(0.4, animations: {
self.datePickerViewTopConstraint.active = false
self.datePickerViewBottomConstraint.active = true
self.view.layoutIfNeeded()
})
}
@IBAction func datePickerDismiss(sender: AnyObject) {
datePumpedLabel.setTitle(Global.dateFormatter.stringFromDate(datePicker.date), forState: UIControlState.Normal)
datePickerView.translatesAutoresizingMaskIntoConstraints = false
datePickerViewTopConstraint = datePickerView.topAnchor.constraintEqualToAnchor(view.bottomAnchor)
UIView.animateWithDuration(0.4, animations: {
self.datePickerViewBottomConstraint.active = false
self.datePickerViewTopConstraint.active = true
self.view.layoutIfNeeded()
})
}
@IBAction func storagePickerDismiss(sender: AnyObject) {
storagePickerView.translatesAutoresizingMaskIntoConstraints = false
storagePickerViewTopConstraint = storagePickerView.topAnchor.constraintEqualToAnchor(view.bottomAnchor)
UIView.animateWithDuration(0.4, animations: {
self.storagePickerViewBottomConstraint.active = false
self.storagePickerViewTopConstraint.active = true
self.view.layoutIfNeeded()
})
}
这是我的故事板的截图... Storyboard
答案 0 :(得分:0)
你们,我想出了一个更好的方法!
我最初缺少的是当你从superview中删除视图时,所有的约束都被删除了。这使事情变得容易多了。
我为当前显示的视图保留了1个约束类变量,因此视图可以动画显示不合适的位置。
我还添加了“设置”功能,以便在rem != 0 && ....
上获取视图。如果没有这个,视图将始终在第一次出现时从顶部开始动画(无法找到解决方法)。
以下是我使用的内容:
C11