2016-07-26 5 views
2

私のストーリーボードにビュー設定がある場合、ボタンを押したときに、画面の下から(カスタムの幅と高さの)ビューをスライドさせる方法がありますか?私は画面をオーバーレイするだけです(あなたがまだ画面の下にある物を押すことができるように)。スイフトの下からスライドを表示していますか?

どうすれば設定できますか?

func isChecked(){ 

    let window = UIApplication.sharedApplication().keyWindow 

    window!.addSubview(collectionView) 
    let height: CGFloat = 250 
    let y = window!.frame.height - 250 
    collectionView.frame = CGRect(x: 0, y: window!.frame.height, width: window!.frame.width, height: height) 

    UIView.animateWithDuration(0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .CurveEaseOut, animations: { 
     self.collectionView.frame = CGRectMake(0, y, self.collectionView.frame.width, self.collectionView.frame.height) 
     }, completion: nil) 
} 

func isUnchecked(){ 
    let window = UIApplication.sharedApplication().keyWindow 
    UIView.animateWithDuration(0.3, animations: { 
     self.collectionView.frame = CGRectMake(0, window!.frame.height, self.collectionView.frame.width, self.collectionView.frame.height) 
    }) 
} 

私は私が私のストーリーボードで作成したビューを除いて、上記のやって何を達成することができます方法はありますか?

+0

を、あなたは何を試してみましたか?これは、フレームや自動レイアウト、UIViewアニメーションなど、さまざまな方法で行うことができます。 – paulvs

+0

この効果をもたらすデフォルトのトランジションスタイルはありません。 – David

+0

@paulvs上記のコードを参照してください - 私が今使っている 'collectionView'を置き換えるためにstoryboardビューをリンクするにはどうすればいいですか? –

答えて

5

私は少しデモを行いました。新しいプロジェクトを作成し、そのコードをViewController.swiftに書きました。それはスウィフト3用に更新

import UIKit 

class ViewController: UIViewController { 

    let collectionView: UICollectionView = { 
     let frame = CGRect(x: 0, y: 50, width: UIScreen.mainScreen().bounds.size.width, height: UIScreen.mainScreen().bounds.size.height - 50) 
     let col = UICollectionView(frame: frame, collectionViewLayout: UICollectionViewFlowLayout()) 
     col.layer.borderColor = UIColor.redColor().CGColor 
     col.layer.borderWidth = 1.0 
     col.backgroundColor = UIColor.yellowColor() 
     return col 
    }() 

    let switchView = UISwitch() 

    func switched(s: UISwitch){ 
     let origin: CGFloat = s.on ? view.frame.height : 50 
     UIView.animateWithDuration(0.35) { 
      self.collectionView.frame.origin.y = origin 
     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     switchView.frame = CGRect(x: 0, y: 20, width: 40, height: 20) 
     switchView.addTarget(self, action: #selector(switched), forControlEvents: .ValueChanged) 

     view.addSubview(switchView) 
     view.addSubview(collectionView) 

    } 

} 
1

SwiftStudierの回答に役立ちます考える:

import UIKit 

class ViewController: UIViewController { 

    let collectionView: UICollectionView = { 
     let frame = CGRect(x: 0, y: 50, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height - 50) 
     let col = UICollectionView(frame: frame, collectionViewLayout: UICollectionViewFlowLayout()) 
     col.layer.borderColor = UIColor.red.cgColor 
     col.layer.borderWidth = 1.0 
     col.backgroundColor = UIColor.yellow 
     return col 
    }() 

    let switchView = UISwitch() 

    func switched(s: UISwitch){ 
     let origin: CGFloat = s.isOn ? view.frame.height : 50 
     UIView.animate(withDuration: 0.35) { 
      self.collectionView.frame.origin.y = origin 
     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     switchView.frame = CGRect(x: 0, y: 20, width: 40, height: 20) 
     switchView.addTarget(self, action: #selector(switched), for: .valueChanged) 

     view.addSubview(switchView) 
     view.addSubview(collectionView) 
    } 
} 
関連する問題