UIView和UILabel基础

父子视图


    override func viewDidLoad() {
        super.viewDidLoad()
        //        1.创建一个UIView对象
        let redView = UIView.init(frame:CGRectMake(100, 100, 100, 100))
        //        2.设置背景颜色
        redView.backgroundColor = UIColor.redColor()
        //        3.添加到界面上
        //        self.view就是redView的父视图,redView是self.view的子视图
        self.view.addSubview(redView)
        
//        4.设置tag值,默认都是0.设tag值的时候值必须大于0
//        tag作用是用来区分界面上不同的视图。
        redView.tag = 100
        
        //        MARK: - 父子视图的特点和方法
        //        1.一个视图只有一个父视图
        //        再创建一个黄色视图
        let yellowView = UIView.init(frame: CGRectMake(0, 0, 50, 50))
        yellowView.backgroundColor = UIColor.yellowColor()
        yellowView.tag = 101
        
        //        连续将同一个视图添加到两个视图上,最后一次添加有效
        redView.addSubview(yellowView)
        self.view.addSubview(yellowView)

        
//        2获取一个视图的父视图
        let superView = redView.superview
        superView?.backgroundColor = UIColor.greenColor()
        
//        3.获取一个视图的所有的子视图
        let subVIew = self.view.subviews
//        拿到所有的子视图中的红色视图和黄色视图
        for item in subVIew {
            
//            判断item是否是UIView类型的。如果是返回true,如果不是 返回false
//            if item.isKindOfClass(UIView.self) {
//                print(item)
//            }
//            if ((item as? UIView) != nil)  {
//                print(item)
//            }
            
            if item.tag == 100 {
                print("红色视图")
                item.backgroundColor  = UIColor.blackColor()
                
            }
            if item.tag == 101 {
                print("黄色视图\(item)")
            }
        }
        
//        4.通过tag值拿到指定的子视图
        let subView2 = self.view.viewWithTag(101)!
        subView2.frame.origin.y =  100
        
        
    }


视图的层次关系

//    MARK:- 生命周期
    override func viewDidLoad() {
        super.viewDidLoad()
        self.createUI()
    }

//    MARK:- 创建界面
    
    func createUI() {
    
//      在一个视图上,添加多个视图的时候。子视图之间如果有公共部分,那么后添加的子视图会覆盖先添加的。
//        1.一般情况下如果想要将一个视图显示在最下面就最先添加,如果想要显示在最上面就最后添加。
        _ = self.createView(CGRectMake(50, 100, 100, 100), backColor: UIColor.yellowColor())
        
        let redView = self.createView(CGRectMake(100, 150, 100, 100), backColor: UIColor.redColor())
        
        let greenView = self.createView(CGRectMake(150, 200, 100, 100), backColor: UIColor.greenColor())
        
        _ = self.createView(CGRectMake(180, 150, 100, 100), backColor: UIColor.purpleColor())
        
//       2. 改变视图的层级关系
//        将指定的视图放在最上层
        self.view.bringSubviewToFront(redView)
        
//        将指定的视图放在最下层
        self.view.sendSubviewToBack(redView)
        
//        将指定的视图插入到另一个视图的上面
        self.view.insertSubview(redView, aboveSubview: greenView)
        
//        将指定的视图插入到另外一个视图的下面
        self.view.insertSubview(redView, belowSubview: greenView)
//        
////        将指定的视图插入到某个位置
//        self.view.insertSubview(<#T##view: UIView##UIView#>, atIndex: <#T##Int#>)
    }

    func createView(frame: CGRect,backColor: UIColor) ->UIView {
        let subView = UIView.init(frame: frame)
        subView.backgroundColor = backColor
        self.view.addSubview(subView)
        return subView
    }

视图的动画效果


    //MARK: - 属性
    let subView = UIView()
    let subView2: UIView? = nil
    
//    MARK: - 生命周期
    override func viewDidLoad() {
        super.viewDidLoad()
    
//        创建视图
        subView.frame = CGRectMake(0, 0, 100, 100)
        subView.center = self.view.center
        subView.backgroundColor = UIColor.greenColor()
        self.view.addSubview(subView)
        
//        使用动画
//        UIViewAnimation1()
//        UIViewAnimation2()
        UIViewAnimation3()
//        UIViewAnimation4()
        self.layerAction()
        
    }
    

//    MARK: - Layer属性
    func layerAction() {
        
//        layer属性是负责视图的形状(显示)
        
//        1.切圆角
//        当圆角的值为正方形宽的一半,就可以切一个圆
        self.subView.layer.cornerRadius = 50
        
//        2.设置边框
        self.subView.layer.borderWidth = 3 //边框宽度
        self.subView.layer.borderColor = UIColor.yellowColor().CGColor
    }
    
    
    
//  MARK:- 动画方法
//    UIView的动画使用: 改变视图的frame相关属性、背景颜色、透明度
    func UIViewAnimation1() {
        
//        功能:执行这个方法前视图的状态,动画的切换到闭包里面设置的最终状态
//        参数1:动画持续时间(单位:秒)
//        参数2:闭包,设置动画结束时视图的状态
        UIView.animateWithDuration(2) {
        
//            在这来设置视图动画结束时的状态
//            a.动画的改变视图的坐标
            self.subView.frame.origin.y = 50
            
//            动画的改变视图的大小
//            self.subView.frame.size = CGSizeMake(50, 50)
            self.subView.transform  = CGAffineTransformMakeScale(0.5, 0.5)
            
//            c.动画的改变视图的背景颜色
            self.subView.backgroundColor = UIColor.redColor()
            
//            d.动画的改变视图的透明度(0~1)
            self.subView.alpha = 0.1
        }
    }
    
    func UIViewAnimation2() {
        
//        参数3:整个动画完成后会自动调用的闭包
        UIView.animateWithDuration(2, animations: { () -> Void in
            self.subView.transform = CGAffineTransformMakeTranslation(0, -200)
            }) { (_) -> Void in
               
//                写动画结束要执行的代码
                
                UIView.animateWithDuration(2, animations: { () -> Void in
                    self.subView.transform = CGAffineTransformMakeTranslation(0, 0)
                })
                

        }
    }

    func UIViewAnimation3() {
        
//        参数1:动画时间
//        参数2:延迟时间
//        参数3:选项,repeat->动画重复执行,
//        autoreverse -> 自动回到动画的开始状态

//        参数4:设置动画结束时视图的闭包
//        参数5:整个动画过程完成后需要执行的闭包
        UIView.animateWithDuration(2, delay: 0.1, options: [.Repeat,.Autoreverse], animations: { () -> Void in
            self.subView.transform = CGAffineTransformMakeTranslation(0, -200)
            }, completion: nil)
    }
    
    
    func UIViewAnimation4() {
        
        
//        参数1:动画时间
//        参数2:延迟时间
//        参数3:弹簧的压力系数
//        参数4:弹簧初始的加速度
//        参数5:选项
//        参数6:设置动画结束时视图的状态
//        参数7:动画结束后要执行的闭包
        UIView.animateWithDuration(2, delay: 0.1, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [.Repeat,.Autoreverse], animations: { () -> Void in
//            self.subView.transform = CGAffineTransformMakeTranslation(0, -200)
            
//            注意:对于有圆角的视图,改变大小而又不影响形状,只能通过形变去缩放。不能直接改变frame的size
            self.subView.frame.size = CGSizeMake(50, 50)
            }, completion: nil)
    }


UILabel基础

//    MARK:- 生命周期
    override func viewDidLoad() {
        super.viewDidLoad()
        createLabel()
    }

//  MARK:- 创建Label
    
    func createLabel() {
        
        
    //        UILabel:UIView -> UIView的属性和方法,UILabel都拥有
//        ========从UIView继承下来的属性和方法==========
        let label = UILabel.init(frame: CGRectMake(100, 100, 200, 200))
        label.backgroundColor = UIColor.redColor()
        self.view.addSubview(label)
        
        
//        ================= UILabel的专有属性 ==============
//        1.text属性
//        设置label上显示的文章
        label.text = "Hello , World  你好世界"
        
        
//        拿到label上当前显示的文字
        print(label.text!)
        
//        2.设置字体
//        使用系统字体,设置字体大小(系统默认大小为17)
//        label.font = UIFont.systemFontOfSize(22)
        
//        使用系统字体,设置字体大小和粗细
//        label.font =  UIFont.systemFontOfSize(17, weight: 5)
        
//        使用系统粗体,设置字体大小
//        label.font = UIFont.boldSystemFontOfSize(17)
        
//        使用系统斜体,设置字体大小
        label.font = UIFont.italicSystemFontOfSize(17)
        
        
//        获取系统所有字体的字体名
//        print(UIFont.familyNames())
//         print(UIFont.familyNames().count)
        
        
//        参数1:字体名
//        参数2:字体大小
//        label.font = UIFont.init(name: "HYZhuanShuF", size: 17)
        
//        总结使用自己的字体的步骤:
//          a.将ttf文件拖到工程中
//          b.在info.plist文件中添加键值对“Fonts provided by application”,将字体添加到系统字体库中
//          c.通过提供字体名的构造方法去创建字体(先要找到自己添加的字体的字体名)
        
        
//        3.设置字体颜色
        label.textColor = UIColor.redColor()
        
//        4.设置阴影颜色
        label.shadowColor = UIColor.blackColor()
        
//        5.设置阴影的偏移效果
        label.shadowOffset = CGSizeMake(2, 2)
        
//        6.设置文字的对其模式(默认是左对齐)
//        Center -> 居中
//        Right -> 右对齐
//        Left -> 左对齐
        label.textAlignment = .Center
        
        label.text = "说走咱就走啊,你有我有全都有啊,路见不平一声吼,该出手时就出手啊,风风火火闯九州啊"
        
//        7.设置行数
        label.numberOfLines = 5
//        自动换行
//        label.numberOfLines = 0
        
//        8.设置换行模式
//        ByWordWrapping -> 以单词为单位 换行
//        ByCharWrapping -> 以字符为单位换行
        label.lineBreakMode =  .ByWordWrapping
        

    }

根据文字设置Label的大小

//        需要显示在Label上的文字
        let str = "有的防护服的发挥份发动机减肥哈将对方尴尬发动 "
       
//        计算显示指定文字所需要的最小空间
//        1.将swift的字符串转换成oc的字符串
        let ocStr = str as NSString
//        2.计算字符串大小
//        参数1:限制显示当前字符串当前字符串的最大宽度和最大高度
//        参数2:设置渲染方式
//             (UsesLineFragmentOrigin)
//        参数3:确定文字的字体(大小)
//        NSFontAttributeName -> 字体对应的Key值
//        NSForegrouundColorAttributeName -> 文字颜色对应的Key值
    let strSize = ocStr.boundingRectWithSize(CGSizeMake(200, 100000), options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(17)], context: nil).size
        print(strSize)
        
        
//        创建label显示文字
        let label = UILabel.init(frame: CGRectMake(100, 100, strSize.width, strSize.height))
        label.backgroundColor = UIColor.yellowColor()
        self.view.addSubview(label)
        label.text = str
//        自动换行
        label.numberOfLines = 0  //必须要自动换行,不然会一行显示
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容