#IOS/Swift入門開發UI篇!從"白吃"到大神,全球最易懂,最全面,最前沿,最詳細,一看就會教程之四!

f2da63e17923fd0a18be1c90b948eb43.jpg

序言

本文為入門教程:主要針對無任何編程基礎或是想了解IOS/Swfit編程開發的小伙伴。
若本文讓你感到任何不適,頭暈想吐等癥狀,嘿嘿嘿···本人概不負責!!!

傳送門

由于本教程是連載類型,為了各位看客老爺跟加直觀的欣賞。
第一課:http://www.lxweimin.com/p/8e8ff60121c4
第二課:http://www.lxweimin.com/p/8cdabd470f6f
第四課: http://www.lxweimin.com/p/55ca9d54a610

概述

經過前三次對Swift基礎語法的講解之后,我們來到了Swift的UI設計篇,UI設計篇我將全面的講述UI設計的相關知識并且繼續插入一些Swift常用的語法.

內容

1.打開Xcode新建一個項目,步驟如下:

1.png
2.png

2.了解AppDelegate.swift中的函數和方法作用和意義

想要學習一門語言就必先了解它.新建一個iOS的項目之后我們發現會自動生成很多文件,我現在來一個一個的了解它的作用和使用的方法.先打開項目的第一個文件AppDelegate.swift
如圖:

A9205C0B-5DFE-49F8-B465-8FC282B12BF8.png

文件中的內容:

//import是導入文件的/庫的關鍵字
//UIKit是iOS中所有的控件的所在庫文件
import UIKit
@UIApplicationMain //調用了OC中的UIApplicationMain函數;
//UIApplicationMain是IOS應用程序的入口
//UIApplacationMain:1.創建了一個UIApplication對象,代表當前應用程序.作用是用來檢測當前應用程序狀態的改變
//                  2.創建一個遵守UIApplicationDelegate的協議的子類對象作為UIApplication的代理,作用是處理應用程序狀態的改變(創建AppDelegate對象并且設置為UIApplication對象的代理)


class AppDelegate: UIResponder, UIApplicationDelegate {
    //屬性:
    var window: UIWindow?

    //方法:
    //一.當應用程序已經啟動成功后,會自動調用這個方法
    
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        //1.在這個方法中來搭建應用程序中的所有的界面
        //2.獲取應用程序需要展示的數據
        //3.使用界面展示數據
        //注意:如果不再做這個方法中去創建window,那么程序會通過Main.stroyboard去創建應用程序的界面
        
        print("程序啟動成功")
        return true
    }
    
    //二.當應用程序將要成為非活躍狀態的時候會自動調用這個方法.
    //活躍狀態:程序在屏幕上可見
    //非活躍狀態:程序沒有顯示在屏幕上(按home鍵進入后臺,來電打斷,在當前應用程序中打開其他的應用程序)
    func applicationWillResignActive(application: UIApplication) {
        //按下home鍵:command + shift + h
        //在這個方法中一般去暫停視頻/音頻播放;游戲需要暫停;保存數據
        print("將要成為非活躍狀態")
        
        
        
        
       
    }
    //三.應用程序已經進入后臺的時候會自動調用
    //進入后臺:按home鍵

    func applicationDidEnterBackground(application: UIApplication) {
        print("進入后臺")
          
    }

    
    //四.應用程序將要進入前臺的時候會自動調用
    //進入前臺:
    func applicationWillEnterForeground(application: UIApplication) {
        
        
        print("將要進入前臺")
        
    }
    //五.應用程序已經變成活躍狀態的時候會自動調用
    //1.程序啟動成功后
    //2.程序從后臺重新進入前臺
    //3.來電打斷結束...
    func applicationDidBecomeActive(application: UIApplication) {
        
        print("已經變成活躍狀態")
         
    }
    
    //六.應用程序將要終止的時候會調用這個方法
    
    func applicationWillTerminate(application: UIApplication) {
        print("應用程序將要終止")
        
        
    }


}

我對AppDelegate.swift文件中的每一行代碼都做了詳細的解釋,然后書寫一個幾個print函數幫助我們理解.

3.創建一個最簡單的UIWindow對象

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    
    //UIWindow:UIView
    //window:窗口,一個應用想要展示在屏幕上,至少要有一個window,一個手機應用程序一般只有一個window
    //應用程序中的所有的界面全部是展示在window上的
    var window: UIWindow?

    //1.程序已經啟動完成
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        //1.創建UIWindow對象
        //self.window = UIWindow.init()
        
        //frame是UIView中的屬性,確定視圖顯示在屏幕上的位置和大小
        //UIScreen.mainScreen() 拿到手機屏幕
        
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        //2.設置根視圖控制器
        self.window?.rootViewController = UIViewController()
        
        //3.設置背景顏色
        self.window?.backgroundColor = UIColor.yellowColor()
        
        
        
        return true
    }

    


}


4.現在介紹項目的第二個文件ViewController.swift,這個翻譯成中文:視圖控制器,從名字就知道關于視圖(界面)的主要代碼都寫在這個文件下,我們先打開這個文件把不需要的注釋刪除.然后我們來添加幾個視圖到界面上.

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //UIView:是IOS中所有視圖(控件)直接/間接的父類;所以UIView的屬性和方法,對于其他類型的視圖都有效
        
        //視圖:在屏幕上能看到的所有的東西都屬于視圖
        
        //一.創建UIView的對象
        let redView = UIView.init()
        
        
        //想要將視圖展示在屏幕上的兩個必要條件
            //1.必須設置坐標的大小(默認坐標是(0,0),大小(0,0,))
            //2.將視圖添加到已經展示在屏幕上的視圖上
        
        //二.設置frame屬性(由坐標(x,y)和大小(width,height)兩個部分組成)
        
        redView.frame = CGRect(x: 10, y: 10, width: 100, height: 100)
        //IOS中所有的結構體都有一個對應的Make方法用來快速的創建一個結構體變量
        redView.frame = CGRectMake(10, 10, 100, 100)
        //三.將視圖添加到界面上
        self.view.addSubview(redView)
        
        //四.設置背景顏色
        //視圖的背景顏色默認是透明色
        //顏色的創建方式:
        //1.通過類型方法創建指定顏色
        //
        redView.backgroundColor = UIColor.redColor()
        //通過三原色來創建顏色
        //CGFloat就是UI中的浮點型
        //參數1,2,3:紅,綠,藍的值(0~1)-(0/255~255/255)
        //參數4:透明度
        
        //redView.backgroundColor = UIColor(red: 149/255.0, green: 106/255.0, blue: 55/255.0, alpha: 1)
        //設置不同程度的灰色
        //redView.backgroundColor = UIColor(white: 0.2, alpha: 1)
        
        //練習:創建一個黃色的矩形,顯示在紅色視圖的中心位置,大小(50,50)
        //方式1:
        //創建視圖對象并且設置frame屬性
        /*
        let yellowView = UIView.init()
        yellowView.frame = CGRectMake(35, 35, 50, 50)
        //添加到界面上
        self.view.addSubview(yellowView)
        //設置背景顏色
        yellowView.backgroundColor = UIColor.yellowColor()
        */
        
        //方式2:
        let yellowView = UIView(frame: CGRectMake(25,25,50,50))
        redView.addSubview(yellowView)
        yellowView.backgroundColor = UIColor.yellowColor()
        
        //GET:計算視圖的坐標的時候,注意相對性.當前視圖被添加到那個視圖上,那么當前視圖的坐標就是相對于誰來算的
        
        
    }

}

5.講解一個視圖對象的基本屬性.創建一個視圖對象,就應該將代碼寫入ViewController.swift文件中,因為ViewController.swift是視圖控制器,屬于視圖的對象或方法都應該寫入視圖控制器中.

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //創建一個視圖對象
        
        let redView = UIView.init()
        //添加到界面上
        self.view.addSubview(redView)
        //設置背景顏色
        redView.backgroundColor = UIColor.redColor()
        
        //1.frame(坐標和大小)
        redView.frame = CGRectMake(100, 100, 100, 100)
        //2.center(中心點坐標)
        //通過frame和確定視圖的中心點坐標
        print(redView.center)
        print(redView.frame)
        
        
        redView.center = CGPointMake(200, 200)
        
        print(redView.frame)
        //3.bounds(坐標和大小)
        //默認情況下bounds的坐標(0,0),大小和視圖的frame大小一樣
        print(redView.bounds)
        
        //了解:
        //如果改變bounds的大小,不改變center的坐標,改變frame的坐標和大小
        /*
        redView.bounds = CGRectMake(0, 0, 200, 200)
        
        print(redView.frame)
        print("center\(redView.center)")
        */
        
        //如果改變bounds的坐標,不影響當前視圖的位置.但是影響添加到當前視圖上的子視圖的坐標,不建議修改bounds
        
        redView.bounds = CGRectMake(0, 0, 100, 100)
        
        
        
        let yellowView = UIView.init(frame:CGRectMake(10, 10, 40, 40))
        yellowView.backgroundColor = UIColor.yellowColor()
        redView.addSubview(yellowView)
        
        
        //4.transform(形變)
        // 當前視圖發生形變,那么添加到當前視圖上的所有的視圖會跟著一起形變
        //1). 縮放
        //參數1:x方向上的縮放比例
        //參數2:y方向上的縮放比例
        redView.transform = CGAffineTransformMakeScale(0.5, 0.5)
        //2).旋轉
        //參數:旋轉角度(圓周率對應的角度)
        redView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4))
        //3).平移
        //參數1:在x方向上平移的距離
        //參數2:在y方向上平移的距離
        redView.transform = CGAffineTransformMakeTranslation(0, 300)
        
        //4).多個形變同時進行
        //在另外一個形變的前提下旋轉
        //參數1:另外一個形變
        
        //在擁有縮放這個形變的前提下旋轉(既可以縮放又可以旋轉)
        redView.transform = CGAffineTransformRotate(CGAffineTransformMakeScale(0.5, 0.5), CGFloat(M_PI_4 / 2))
        //在另外一個形變的前提下平移(既可以縮放和旋轉又可以平移)
        redView.transform = CGAffineTransformTranslate(redView.transform, 0, 100)
        
        //既可以平移又可以縮放
        
        redView.transform = CGAffineTransformScale(CGAffineTransformMakeTranslation(100, 0), 0.5, 2)
        
        
        //組合兩個形變
        //旋轉形變
        let rotate = CGAffineTransformMakeRotation(0.2)
        
        //平移形變
        
        let transLation = CGAffineTransformMakeTranslation(100, 100)
        
        //將旋轉形變和平移形變組合
        redView.transform = CGAffineTransformConcat(rotate, transLation)
    }


}

練習:你可以嘗試在創建一個視圖對象如下圖所示:


B6512EC1-6A2F-4EE1-A22B-91946C568230.png

總結

本次教程因為首次講解關于UI設計的內容,所以代碼非常簡單,都是一些簡單關于視圖控制器和視圖對象屬性和方法的講解.

本次教程到處就要結束了,如果你有什么更好的建議和想法,可以聯系我,讓我們一同進步。

未完待續····每周日更新新的教程,敬請期待!88····

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,180評論 4 61
  • 我們先來解決第一個問題,為什么只有人類的女性才有經期這一說法,而自然界的其它雌性動物沒有? 這個我相信大家都曾經聽...
    桔子花_1ded閱讀 321評論 0 1
  • 今天周六了。這周的覺察日記還沒寫。心里時時惦記著。有情緒,有事情發生,想寫,懶,一晃就過去了。 說是要時時...
    暖暖的吧閱讀 394評論 0 0
  • 在開發的過程中,主要碰到過如下幾種導致項目崩潰的方式: 1、數組越界導致的崩潰。 -[__NSArrayI obj...
    SuperBoy_Timmy閱讀 2,480評論 0 10