2016-08-16 1 views
0

私はSwiftを勉強している絶対的なIOS初心者です。IOS、Swift:2つのビュー(アニメーションあり)の分割画面を作成しています

私はカレンダーのUIコントロール(既に動作している)と、リストビューの下にアプリケーションを作成しようとしています。

画像は下の写真と似ています(巨大な写真をお詫び申し上げます)。

カレンダーアプリのように、画面にはカレンダーコントロールが表示されますが、ボタンをクリックすると、リストビュー自体が下に表示され、画面が分割されます。

私が考えることができる唯一の方法は、コードでUITableViewを生成し、現在のViewControllerをデリゲートとデータソースの両方として割り当て、両方のビュー(カレンダーとリストビュー)をアニメーション化して拡大/縮小して画面を分割することです。

StackViewはIOS-9以上のため使用したくありません。

これを行うより良い方法はありますか?

enter image description here

+0

リストビューが隠されているときに、他のビューにどうしますか? –

+0

リストビューを非表示にすると、カレンダービューがウィンドウ全体を占有します。リストビューが表示されると、ウィンドウの半分に縮小されます。 – user884248

+0

制約を変更することは簡単ですか?上のウィンドウと下のウィンドウに同じ高さの制約がある場合は、その制約を解除して(必要に応じて他の制約をコードから変更して)移動させます。すべてのものをアニメーション化するには、 'animate:withDuration'コール(それよりもはるかに簡単です)を行うことさえできます。 –

答えて

2

私はあなたがこのような何かをしようとしている疑いがあります。それがお役に立てば幸い:

スウィフト2:

let view2 = UIView() 

var screenWidth = CGFloat() 
var screenHeight = CGFloat() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let screenSize: CGRect = UIScreen.mainScreen().bounds 
    screenWidth = screenSize.width 
    screenHeight = screenSize.height 

    let view1 = UIView() 
    view1.frame = CGRectMake(0, 0, screenWidth, screenWidth) 
    view1.backgroundColor = UIColor.blueColor().colorWithAlphaComponent(0.5) 
    self.view.addSubview(view1) 

    let lbl1 = UILabel() 
    lbl1.frame = CGRectMake(0, 0, screenWidth, 50) 
    lbl1.text = "This is view 1" 
    lbl1.textAlignment = NSTextAlignment.Center 
    lbl1.center = view1.center 
    view1.addSubview(lbl1) 

    let btn = UIButton() 
    btn.frame = CGRectMake(0,0,200,100) 
    btn.center = CGPoint(x: view1.center.x, y: view1.center.y+60) 
    btn.setTitle("Show view 2", forState: .Normal) 
    btn.addTarget(self, action: "showView2:", forControlEvents: .TouchUpInside) 
    view1.addSubview(btn) 


    view2.frame = CGRectMake(0, screenHeight, screenWidth, screenHeight-screenWidth) 
    view2.backgroundColor = UIColor.redColor().colorWithAlphaComponent(0.5) 
    self.view.addSubview(view2) 

    let lbl2 = UILabel() 
    lbl2.frame = CGRectMake(0, (screenHeight-screenWidth)/2-25, screenWidth, 50) 
    lbl2.text = "This is view 2" 
    lbl2.textAlignment = NSTextAlignment.Center 
    view2.addSubview(lbl2) 

} 

var c = 0 

func showView2(sender : UIButton) { 

    UIView.animateWithDuration(1.0, delay: 0.0, options: .CurveEaseOut, animations: { 

     if (self.c%2 == 0) { 
      self.view2.frame = CGRectMake(0, self.screenWidth, self.screenWidth, self.screenHeight-self.screenWidth) 
      sender.setTitle("Hide view 2", forState: .Normal) 
     } 
     else { 
      self.view2.frame = CGRectMake(0, self.screenHeight, self.screenWidth, self.screenHeight-self.screenWidth) 
      sender.setTitle("Show view 2", forState: .Normal) 
     } 

     }, completion: { finished in 

    }) 

    c++ 

} 

スウィフト3:

let view2 = UIView() 

var screenWidth = CGFloat() 
var screenHeight = CGFloat() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let screenSize: CGRect = UIScreen.main.bounds 
    screenWidth = screenSize.width 
    screenHeight = screenSize.height 

    let view1 = UIView() 
    view1.frame = CGRect(x: 0, y: 0, width: screenWidth, height: screenWidth) 
    view1.backgroundColor = UIColor.blue.withAlphaComponent(0.5) 
    self.view.addSubview(view1) 

    let lbl1 = UILabel() 
    lbl1.frame = CGRect(x: 0, y: 0, width: screenWidth, height: 50) 
    lbl1.text = "This is view 1" 
    lbl1.textAlignment = NSTextAlignment.center 
    lbl1.center = view1.center 
    view1.addSubview(lbl1) 

    let btn = UIButton() 
    btn.frame = CGRect(x: 0, y: 0, width: 200, height: 100) 
    btn.center = CGPoint(x: view1.center.x, y: view1.center.y+60) 
    btn.setTitle("Show view 2", for: .normal) 
    btn.addTarget(self, action: #selector(showView2(_:)), for: .touchUpInside) 
    view1.addSubview(btn) 


    view2.frame = CGRect(x: 0, y: screenHeight, width: screenWidth, height: screenHeight-screenWidth) 
    view2.backgroundColor = UIColor.red.withAlphaComponent(0.5) 
    self.view.addSubview(view2) 

    let lbl2 = UILabel() 
    lbl2.frame = CGRect(x: 0, y: (screenHeight-screenWidth)/2-25, width: screenWidth, height: 50) 
    lbl2.text = "This is view 2" 
    lbl2.textAlignment = NSTextAlignment.center 
    view2.addSubview(lbl2) 

} 

var c = 0 

func showView2(_ sender : UIButton) { 

    UIView.animate(withDuration: 1.0, delay: 0.0, options: .curveEaseOut, animations: { 

     if (self.c%2 == 0) { 
      self.view2.frame = CGRect(x: 0, y: self.screenWidth, width: self.screenWidth, height: self.screenHeight-self.screenWidth) 
      sender.setTitle("Hide view 2", for: .normal) 
     } 
     else { 
      self.view2.frame = CGRect(x: 0, y: self.screenHeight, width: self.screenWidth, height: self.screenHeight-self.screenWidth) 
      sender.setTitle("Show view 2", for: .normal) 
     } 

    }, completion: { finished in 

    }) 

    c += 1 

} 
関連する問題