zoukankan      html  css  js  c++  java
  • iOS: 学习笔记, 用代码驱动自动布局实例(swift)

    iOS自动布局是设置iOS界面的利器.
    本实例展示了如何使用自动布局语言设置水平布局, 垂直布局
    1. 创建空白iOS项目(swift)
    2. 添加一个控制器类, 修改YYAppDelegate.swift文件

    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
                                
        var window: UIWindow?
    
    
        func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
            self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
            // Override point for customization after application launch.
            self.window!.backgroundColor = UIColor.whiteColor()
            self.window!.makeKeyAndVisible()
            
            self.window!.rootViewController = MainViewController(nibName: nil, bundle: nil)
            
            return true
        }

    3. 修改控制器类

    //
    //  MainViewController.swift
    //  UIByCode3_AutoLayout
    //
    //  Created by yao_yu on 14-6-17.
    //  Copyright (c) 2014 yao_yu. All rights reserved.
    //
    
    import UIKit
    
    class MainViewController: UIViewController {
        
        var viewMoveBlock: UIView! = UIView()
    
        init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
            super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
            
            self.viewMoveBlock.backgroundColor = UIColor.blueColor()
            self.viewMoveBlock.frame = CGRectMake(100, 100, 20, 20);
            self.view.addSubview(self.viewMoveBlock)
            
            var commandPane = UIView(frame:CGRectMake(0, 0, 160, 40)) //as UIView
            self.view.addSubview(commandPane)
            
            let BUTTONSIZE:CGFloat = 40
            var commands: Dictionary<String, UIButton> = [:]
            var action:String
            for name in ["Left", "Right", "Up", "Down", "In", "Out"]
            {
                var button = UIButton.buttonWithType(UIButtonType.System) as UIButton
                button.setTitle(name, forState: UIControlState.Normal)
                button.setTranslatesAutoresizingMaskIntoConstraints(false)
                button.addTarget(self, action: Selector("move(name)"), forControlEvents: UIControlEvents.TouchUpInside)
                commands["btn(name)"] = button
                commandPane.addSubview(button)
            }
            
            var views = ["commandPane": commandPane]
            
            commandPane.setTranslatesAutoresizingMaskIntoConstraints(false)
            self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("[commandPane(260)]", options:NSLayoutFormatOptions(0), metrics:nil, views:views))
            self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[commandPane(50)]", options:NSLayoutFormatOptions(0), metrics:nil, views:views))
            self.view.addConstraint(NSLayoutConstraint(item: commandPane, attribute:NSLayoutAttribute.CenterX ,relatedBy:NSLayoutRelation.Equal, toItem:self.view ,attribute:NSLayoutAttribute.CenterX, multiplier:1.0, constant:0.0))
            
            let metrics = ["SIZE": 40]
            for (k,v) in commands {
                v.setTranslatesAutoresizingMaskIntoConstraints(false)
                commandPane.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[(k)(SIZE)]", options:NSLayoutFormatOptions(0), metrics:metrics, views:commands))
            }
            commandPane.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[btnLeft(SIZE)][btnRight(SIZE)][btnUp(SIZE)][btnDown(SIZE)]-(>=0)-[btnOut(SIZE)][btnIn(SIZE)]|", options:NSLayoutFormatOptions(0), metrics:metrics, views: commands))
            
        }
    
        func moveLeft()
        {
            self.moveTo(-20, 0)
        }
        
        func moveRight()
        {
            self.moveTo(20, 0)
        }
        
        func moveUp()
        {
            self.moveTo(0, -20)
        }
        
        func moveDown()
        {
            self.moveTo(0, 20)
        }
        
        func moveOut()
        {
            var rect = self.viewMoveBlock.frame;
            
            rect.origin.x -= 20;
            rect.origin.y -= 20;
            rect.size.width += 40;
            rect.size.height += 40;
            
            UIView.beginAnimations(nil, context: nil)
            UIView.setAnimationDuration(1.0)
            
            self.viewMoveBlock.frame = rect;
            UIView.commitAnimations()
        }
        
        func moveIn()
        {
            var rect = self.viewMoveBlock.frame;
            
            rect.origin.x += 20;
            rect.origin.y += 20;
            rect.size.width -= 40;
            rect.size.height -= 40;
            
            UIView.beginAnimations(nil, context: nil)
            UIView.setAnimationDuration(1.0)
            
            self.viewMoveBlock.frame = rect;
            UIView.commitAnimations()
        }
        
        func moveTo(x: CGFloat, _ y: CGFloat)
        {
            var p = self.viewMoveBlock.center;
            
            p.x += x;
            p.y += y;
            
            UIView.beginAnimations(nil, context: nil)
            UIView.setAnimationDuration(1.0)
            
            self.viewMoveBlock.center = p;
            UIView.commitAnimations()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
        
    
        /*
        // #pragma mark - Navigation
    
        // In a storyboard-based application, you will often want to do a little preparation before navigation
        override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
            // Get the new view controller using [segue destinationViewController].
            // Pass the selected object to the new view controller.
        }
        */
    
    }

    4. 运行

  • 相关阅读:
    python---装饰器用法小结
    python---mysql事务
    python---sql语句集体更改数据
    python多继承中的深度优先与广度优先
    python---copy
    vue 主次页面区分
    css 过渡动画
    android web外壳
    cordova 打包 守护进程无法启动
    JavaScript 原生控制元素添加删除
  • 原文地址:https://www.cnblogs.com/yaoyu126/p/3793458.html
Copyright © 2011-2022 走看看