IOS,Swift : creating a split screen with 2 views, 带动画

标签 ios swift

我是一个学习 Swift 的绝对 IOS 新手。

我正在尝试创建一个顶部有日历 UI 控件(已经可以使用)和底部有 ListView 的应用程序。

与底部的图片完全一样(我为这张大图道歉)。

现在,就像日历应用程序一样,屏幕将只显示日历控件,但如果您单击一个按钮 - ListView 将在底部显示自己并且屏幕将被拆分。

我能想到的唯一方法是在代码中生成 UITableView,将当前 ViewController 分配为委托(delegate)和数据源,并为两个 View (日历和 ListView )设置动画以扩大/缩小以拆分屏幕。

我不想使用 StackView,因为那是 IOS-9 及更高版本。

有更好的方法吗?

enter image description here

最佳答案

我怀疑你正试图做这样的事情。希望对您有所帮助:

swift 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++

}

swift 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

}

关于IOS,Swift : creating a split screen with 2 views, 带动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38980424/

相关文章:

ios - 我可以使用 NSURLSessionUploadTask 进行离线同步任务吗?

ios - AVFoundation 和 UITableView

ios - OpenCV xphoto 函数

ios - 命令 PhaseScriptExecution 因非零退出代码 flutter 而失败

ios - 问题打印 UITextField 值

swift - 如何从 Swift REPL 获取可用模块列表?

ios - 无法打开用户库中以前的应用程序版本创建的文件

iphone - 我可以检测 UIPickerView 滚动事件吗?

ios - Quickblox:是否可以删除用户创建的所有自定义对象

ios - 如何检测快速触摸或点击的tableView单元格