2017-02-17 2 views
0

Я хочу, чтобы вы выбрали дату для анимации так же, как клавиатура. Это способ добиться этого?Анимация, как клавиатура на datepicker, появляющаяся с быстрым ios

Пока это мой код, но я получаю только вид контейнера (тот, который имитирует тень) создает странную анимацию.

@IBAction func ShowPicker(sender: AnyObject) { 

    let ContainerHeight = CGFloat(264) //320, 216 
    let PickerHeight = CGFloat() 
    //container for datepicker and simulates a shadow 
    shadowView = UIView() 
    //Use with transitionWithView 
    //shadowView.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height) 
    //Use with animateWithDuration 
    shadowView.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.5) 
    let tap = UITapGestureRecognizer(target: self, action: #selector(touchOutSide)) 

    shadowView.addGestureRecognizer(tap) 

    let datePicker : UIDatePicker = UIDatePicker() 
    let datePickerContainer = UIView() 

    //datePickerContainer.frame = CGRectMake(0.0, self.view.frame.width, self.view.frame.width, 320.0) 
    datePickerContainer.frame = CGRectMake(0.0, self.view.frame.height - ContainerHeight, self.view.frame.width, ContainerHeight) 

    //Nota ese 320 debe ser la altura natural del picker mas la altura de los botones 

    datePickerContainer.backgroundColor = UIColor.whiteColor() 

    let pickerSize : CGSize = datePicker.sizeThatFits(CGSizeZero) 
    //datePicker.frame = CGRectMake(0.0, 0.0, self.view.frame.width, 216.0) 
    datePicker.frame = CGRectMake(0.0, 0.0, self.view.frame.width, ContainerHeight) 
    //datePicker.clipsToBounds = true 
    datePicker.setDate(NSDate(), animated: true) 
    datePicker.maximumDate = NSDate() 
    //datePicker.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 1.0, alpha: 0.5) 
    datePicker.datePickerMode = UIDatePickerMode.DateAndTime 
    datePicker.addTarget(self, action: "dateChangedInDate:", forControlEvents: UIControlEvents.ValueChanged) 
    //datePickerContainer.addSubview(datePicker) 

    let pickerHolder = UIView() 
    pickerHolder.frame = CGRectMake(0.0, 20, self.view.frame.width, ContainerHeight) 
    pickerHolder.addSubview(datePicker) 

    datePickerContainer.addSubview(pickerHolder) 

    let doneButton = UIButton() 
    doneButton.setTitle("Ok", forState: UIControlState.Normal) 
    doneButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) 
    doneButton.backgroundColor = UIColor.lightGrayColor() 
    doneButton.addTarget(self, action: Selector("dismissPicker:"), forControlEvents: UIControlEvents.TouchUpInside) 
    doneButton.frame = CGRectMake(self.view.frame.width/2, 0.0, self.view.frame.width/2, 37.0) 

    let btnCancel = UIButton() 
    btnCancel.setTitle("Cancel", forState: UIControlState.Normal) 
    btnCancel.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) 
    btnCancel.backgroundColor = UIColor.lightGrayColor() 
    btnCancel.addTarget(self, action: Selector("cancelTap"), forControlEvents: UIControlEvents.TouchUpInside) 
    btnCancel.frame = CGRectMake(0.0, 0.0, self.view.frame.width/2, 37.0) 

    datePickerContainer.addSubview(doneButton) 
    datePickerContainer.addSubview(btnCancel) 

    shadowView.addSubview(datePickerContainer) 
    // Makes weird animations: 
    //UIView.transitionWithView(self.view, duration: 0.9, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: {self.view.addSubview(self.shadowView)}, completion: nil) 

    self.view.addSubview(shadowView) 

    UIView.animateWithDuration(2, animations: {() -> Void in self.shadowView.frame = CGRect(x: 0.0, y: 0.0, width: self.view.frame.width, height: ContainerHeight)}) 
} 

ответ

0

Поскольку ваша функция обозначается IBOutlet, я подозреваю, что вы используете Interface Builder (IB). Я бы подумал о создании вашего выбора даты, контейнера и кнопок с IB, чтобы вы могли также их стилизовать. Жизненный цикл вашего выбора даты и связанных с ним представлений в настоящее время привязан к функции ShowPicker, но вы хотите, чтобы они оставались выше этой функции, как правило, они существуют в вашем контроллере представления или в одном из его подзонов. Вот пример кода, с которого вы можете начать и приукрасить свою специфику.

import UIKit 

class ViewController: UIViewController { 

    var button: UIButton! 
    let datePicker = UIDatePicker() 
    var isDatePickerShowing = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     button = UIButton(type: .system) 
     button.setTitle("Toggle Date Picker", for: .normal) 
     button.frame = CGRect(x: 10, y: 60, width: 200, height: 32) 
     button.addTarget(self, action:#selector (self.tapped), for: .touchUpInside) 
     view.addSubview(button) 


     let dpSize = datePicker.bounds.size 
     let size = view.bounds.size 
     datePicker.frame = CGRect(
      x: (size.width - dpSize.width)/2.0, 
      y: size.height, 
      width: dpSize.width, 
      height: dpSize.height 
     ) 
     view.addSubview(datePicker) 
    } 

    func tapped(sender: AnyObject) { 
     let dpSize = datePicker.bounds.size 
     let size = view.bounds.size 
     let y = isDatePickerShowing ? size.height : size.height - dpSize.height 
     isDatePickerShowing = !isDatePickerShowing 
     UIView.animate(withDuration: 0.75) { 
      self.datePicker.frame = CGRect(
       x: (size.width - dpSize.width)/2.0, 
       y: y, 
       width: dpSize.width, 
       height: dpSize.height 
      ) 
     } 
    } 
} 
Смежные вопросы