#IOS/Swift入门开发UI篇-UIImageView和UIbutton!从"白吃"到大神,全球最易懂,最全面,最前沿,最详细,一看就会教程之六!

f2da63e17923fd0a18be1c90b948eb43.jpg

[TOC]

序言

本文为入门教程:主要针对无任何编程基础或是想了解IOS/Swfit编程开发的小伙伴。
若本文让你感到任何不适,头晕想吐等症状,嘿嘿嘿···本人概不负责!!!
12.jpg

概述

经过前三次对Swift基础语法的讲解之后,我们来到了Swift的UI设计篇,UI设计篇我将全面的讲述UI设计的相关知识并且继续插入一些Swift常用的语法.本章教程为UI设计篇中的UIImageView和UIbutton一些基本基础和简单应用.

内容

1.UIImageView的基本属性

UIimageView继承UIView拥有UIView的一切属性,UIImageView就是图片视图,在我们看到的app上有关图片的一切都属于UIImageView.
//MARK - (注意:代码中所有的图片名eg:"back2.jpg","luffy2.png" 都是我提前将这个名字的图片加载到项目中的,如果需要运行代码区的代码,需要自行加载图片或修改图片名!!!)

//MARK - (注意:代码中所有的图片名eg:"back2.jpg","luffy2.png" 都是我提前将这个名字的图片加载到项目中的,如果需要运行代码区的代码,需要自行加载图片或修改图片名!!!)
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //========UIView的属性=========
        //UIImageView:UIView
        //1.创建UIImageView对象
        let imageView = UIImageView.init(frame: CGRectMake(100, 100, 300, 300))
        //2.添加到界面上
        self.view.addSubview(imageView)
        //3.设置背景颜色
        imageView.backgroundColor = UIColor.yellowColor()
        
        
        //=======UImageView专有属性======
        //1.image属性
        //通过图片名去创建一个图片对象(注意:如果图片的格式是png,那么图片名的后缀可以省略.但是其他格式的图片的图片名的后缀不能省略)
        imageView.image = UIImage.init(named: "back2.jpg")
        imageView.image = UIImage.init(named: "luffy2.png")
        
        //通过图片路径去创建一个图片对象
        //将文件(除了swift文件)放到工程中,实质是放到了当前应用程序的包文件中
        //想要拿到工程中的图片路径先要获取包文件;
        //拿到包中的指定的文件的路径
        
        let imagePath =  NSBundle.mainBundle().pathForResource("luffy4", ofType: "png")
        imageView.image = UIImage.init(contentsOfFile: imagePath!)
    
        //比较通过图片名和通过图片地址创建图片对象的两种方法:
        //1).通过图片名创建的图片对象在程序结束后才会销毁,只会创建一次;通过图片地址创建的图片对象是当前图片对象不再使用的时候就销毁
        //2).使用图片名创建图片的情况:创建小图标的时候;在工程中会重复使用的图片
        //3).使用图片地址创建图片对象的情况:不会频繁的在多个界面出现的大图
        
        
        
        
        //2.内容
        imageView.contentMode = .ScaleAspectFill
        
    }
    
    
  

}


2.UIImageView帧动画

帧动画的实质就是重复的在一段时间内连续播放一定数量的图片.主要的实现原理就是创建一个计时器和将一系列的图片放在数组中.

import UIKit

class ViewController: UIViewController {
    
    var imageView = UIImageView()
    
    override func viewDidLoad() {
        super.viewDidLoad()
       self.creatImageView()
        
        //创建一个定时器,并且自动开启
        //参数1:定时时间
        //参数2:调用方法的对象
        //参数3:存储定时时间到了以后需要调用的方法
        //参数4:给当前的NSTimer的userInfo属性赋值的值
        //参数5:是否重复
        NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "timerAction:", userInfo: "aaa", repeats: true)
        
        
    }
    
    func timerAction(timer:NSTimer){
        self.imageView.frame.origin.x += 3
        
        
        if self.imageView.frame.origin.x >= self.view.bounds.width - self.imageView.bounds.width{
            //暂停计时器
            timer.fireDate = NSDate.distantFuture()
            //让计时器继续
            //timer.fireDate = NSDate.distantPast()
            
            
        }
        
    }
    
    func creatImageView(){
        //1.创建一个UIIamgeView对象
        //通过图片去创建一个imageView;UIImageView的大小是图片的大小,坐标(0,0)
        imageView = UIImageView.init(image: UIImage.init(named: "DOVE 1.png"))
        //显示在界面上
        self.view.addSubview(imageView)
        
        //3.使用UIImageView播放帧动画
        //a.设置帧动画数组
        
        //创建一个空的数组
        var imageArray = [UIImage]()
        //通过for循环创建18张图片
        for item in 1...18{
            //拼接图片名
            let imageName = "DOVE \(item).png"
            //创建对应的图片
            let image = UIImage.init(named:imageName)
            //将图片保存到数组中
            imageArray.append(image!)
        }
        imageView.animationImages = imageArray
        //b.设置动画时间,单位秒
        imageView.animationDuration = 1
        //c.设置动画的重复次数 值0的意思是一直重复
        imageView.animationRepeatCount = 0
        //c.开始动画
        imageView.startAnimating()
        
        
    }

3.UIButton的基本属性

简单和必须的控件基础吧,没有什么重点,因为全都是重点,唯一需要注意的是设置按钮上的文字对齐吧,因为不常用我一直以为是这句代码:
//titleBtn.titleLabel?.textAlignment = .Left //--此方法错误
很多大神和高手都潜意识的认为是这句代码,我也一直这么认为,然而我以为的仅仅只是我以为,经过数十次测试这句代码本没有卵用,看起来很正确但是必不会把按钮上的文字居左对齐!正确的代码是这句:
titleBtn.contentHorizontalAlignment = .Left

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.titleButton()
        self.imageButton()
        self.imageTitleBtn()
        
        //let a = Double(arc4random()%256)/255
        //print(a)
    }
    
    //MARK: - 图片文字按钮
    func imageTitleBtn(){
        //同时设置title和image属性,显示是图片在左,文字在右
        //1.创建一个按钮对象
        let btn1 = UIButton.init(frame: CGRectMake(100, 300, 200, 50))
        self.view.addSubview(btn1)
        
        //2.设置title
        btn1.setTitle("标题", forState: .Normal)
        btn1.setTitleColor(UIColor.redColor(), forState: .Normal)
        
        //3.设置图片
        btn1.setImage(UIImage.init(named: "luffy1"), forState: .Normal)
        //btn1.setBackgroundImage(UIImage.init(named: "luffy2"), forState: .Normal)
        //4.添加事件
        btn1.addTarget(self, action: "btnAction:", forControlEvents: .TouchUpInside)
        
    }
    
    
    
    
    
    
    
    
    
    //MARK: - 图片按钮
    func imageButton(){
        //1.创建一个按钮对象
        let imageBtn = UIButton.init(frame: CGRectMake(100, 200, 80, 80))
        //2.添加到界面上
        self.view.addSubview(imageBtn)
        //3.设置图片
        //参数1:图片
        //参数2:状态(正常/高亮/选中/不可用)
        imageBtn.setImage(UIImage.init(named: "luffy1"), forState: .Normal)
        //4.添加按钮点击的事件
        imageBtn.addTarget(self, action: "btnAction:", forControlEvents: .TouchUpInside)
        
        
    }
    
    
    //MARK: - 文字按钮
    
    func titleButton(){
        //UIButton:UIControl:UIView
        //UIButton上有一个titleLable专门负责按钮上文字的显示;有一个imageView专门负责按钮上图片的显示
        //=========UIView的属性和方法=========
        //1.创建UIButton对象
        let titleBtn = UIButton.init(frame: CGRectMake(100, 100, 100, 50))
        //2.添加到界面上
        self.view.addSubview(titleBtn)
        //3.设置背景颜色
        titleBtn.backgroundColor = UIColor.redColor()
        
        //========UIButton专有的属性和方法========
        //1.设置按钮上显示的文字
        //参数1:想要在按钮上显示的文字
        //参数2:状态
        //Normal -> 正常状态(按钮正常显示,没有被点击或者按下的时候)
        //Highligthed -> 高亮(按钮被按下,没有弹起来的时候的状态)
        //Selected -> 选中状态
        //Disabled -> 不可用状态(按钮不能被点击)
        titleBtn.setTitle("确定", forState: .Normal)
        titleBtn.setTitle("高亮", forState: .Highlighted)
        
        titleBtn.setTitle("选中", forState: .Selected)
        titleBtn.setTitle("不可用", forState: .Disabled)
        //2.设置当前按钮是否选中(默认是false)
        titleBtn.selected = false
        //3.设置当前按钮是否可用(默认是true)
        titleBtn.enabled = true
        
        //4.设置文字颜色
        titleBtn.setTitleColor(UIColor.yellowColor(), forState: .Normal)
        titleBtn.setTitleColor(UIColor.lightGrayColor(), forState: .Disabled)
        //注意:按钮上的文字和文字颜色,必须通过对应的set方法去根据状态去设置.其他和文字相关的属性可以通过拿到titleLabel去设置
        //5.设置按钮上的文字字体
        titleBtn.titleLabel?.font = UIFont.systemFontOfSize(12)
        //6.设置按钮上的文字的对齐方式
        //titleBtn.titleLabel?.textAlignment = .Left //--此方法错误
        //MARK: 这是正确的方法
        titleBtn.contentHorizontalAlignment = .Left
        
        
        //KEY:===========7.给按钮添加事件=============
        //参数1:调用方法的对象
        //参数2:指定事件发生后参数1要去调用的方法
        //参数3:事件
        titleBtn.addTarget(self, action: "btnAction:", forControlEvents: .TouchUpInside)
        
        
    
    }
    
    //MARK: - 按钮点击
    func btnAction (btn:UIButton){
        
        btn.backgroundColor = UIColor.init(red: CGFloat(arc4random()%256)/255, green: CGFloat(arc4random()%256)/255, blue: CGFloat(arc4random()%256)/255, alpha: 1)
        
    }
    
    

}

4.简单的UIButton应用,定制一个图片高度是整个按钮高度的4/5;文字高度是整个按钮高度的1/5的按钮

新建一个类继承UIButton,取名LGButton.

import UIKit

class LGButton: UIButton {
    //图片高度是整个按钮高度的4/5;文字高度是整个按钮高度的1/5
    
    //功能:设置button上的imageView的坐标和大小
    
    //参数1:当前按钮的范围(只需要大小)
    //返回值:重新设置的图片的坐标和大小
    override func imageRectForContentRect(contentRect: CGRect) -> CGRect {
        
        let x: CGFloat = 0
        let y: CGFloat = 0
        
        let w: CGFloat = contentRect.size.width
        let h: CGFloat = contentRect.size.height * 4 / 5
        
        return CGRectMake(x, y, w, h)
    }
    
    
    
    //功能:设置button上的imageView的坐标和大小
    
    //参数1:当前按钮的范围(只需要大小)
    //返回值:重新设置的图片的坐标和大小
    
    override func titleRectForContentRect(contentRect: CGRect) -> CGRect {
        let x: CGFloat = 0
        let y: CGFloat = contentRect.size.height * 4 / 5
        let w: CGFloat = contentRect.size.width
        let h: CGFloat = contentRect.size.height / 5
        
        
        return CGRectMake(x, y, w, h)
        
    }


使用上面定制的按钮

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    
        //1.创建按钮对象
        let btn = LGButton(frame:CGRectMake(100,100,100,120))
        //2.设置文字和
        btn.setTitle("文字", forState: .Normal)
        btn.setTitleColor(UIColor.redColor(), forState: .Normal)
        btn.titleLabel?.textAlignment = .Center
        //3.设置图片
        
        btn.setImage(UIImage.init(named: "luffy4"), forState: .Normal)
        //4.添加到界面上
        self.view.addSubview(btn)
        //5.添加按钮点击事件
        btn.addTarget(self, action: "btnAction", forControlEvents: .TouchUpInside)
        
    }

    
    func btnAction(){
        print("O(∩_∩)O哈哈哈~")
    }

总结

本次教程是UI阶段使用最多的控件之一的UIimageView和UIbutton控件,需要反复的练习和掌握.这些基础属性也非常的简单.可以试着定制属于自己的控件.

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

推荐阅读更多精彩内容