2016年3月5日 星期六

iOS筆記:Swift練習(3)

ImageView的縮放

  1. Scale to Fill (預設):圖像的寬高比會隨著縮放改變.
  2. Aspect Fit:圖像的寬高比會保持固定. 不過可能會在圖像的兩旁留下空白
  3. Aspect Fill:圖會等比例縮放來填滿視圖尺寸, 因為是等比例所以有些部分可能無法顯示

如果另外有勾選Clip SubView 可以避免圖像延伸到其他的視圖區域(ex. TableView…)

Content Hugging Priority

Stack View依靠這個優先權來決定是否應該將Field 標籤或是Value標籤延伸, 有較高優先權的視圖會有較高的抵抗順序, 將會維持原來的大小.

自訂表格視圖外觀

// Change the color of the table view
        tableView.backgroundColor = UIColor(red: 240.0/255.0, green: 240.0/255.0, blue: 240.0/255.0, alpha: 0.2)

        // Remove the separators of the empty rows
        tableView.tableFooterView = UIView(frame: CGRectZero)

        // Change the color of the separator
        tableView.separatorColor = UIColor(red: 240.0/255.0, green: 240.0/255.0, blue: 240.0/255.0, alpha: 0.8)

        // Set the title of the navigation bar
        title = restaurant.name

有內容的cell顏色還是白色的

    cell.backgroundColor = UIColor.clearColor()

自定導覽列的外觀

UIAppearance讓開發者可以去自訂大部分UIKit元件的外觀, 包含整個應用程式的導覽列.
ex. UINavigationBar.appearance()

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

        UINavigationBar.appearance().barTintColor = UIColor(red: 242.0/255.0, green: 116.0/255.0, blue: 119.0/255.0, alpha: 1.0)
        UINavigationBar.appearance().tintColor = UIColor.whiteColor()

        if let barFont = UIFont(name: "Avenir-Light", size: 24.0) {
            UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor(), NSFontAttributeName:barFont]
        }

        // Change the status bar's appearance
        UIApplication.sharedApplication().statusBarStyle = .LightContent

        return true
    }

AppDelegate就像是應用程式的進入點, 這個類別是由Xcode的在專案建立時產生的. 如果想變更的東西是關係到整個應用程式的話, 通常會將自訂的程式放在這裡.

        // Remove the title of the back button
        navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)

在iOS8中, Apple可以讓你用滑動或是點選來隱藏導覽列. 勾選On Swipe再利用以下的code關掉它

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        navigationController?.hidesBarsOnSwipe = true
    }

因為這功能是針對整個應用程式的導覽列, 針對不想被隱藏導覽列的部分可以這樣

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        navigationController?.hidesBarsOnSwipe = false
        navigationController?.setNavigationBarHidden(false, animated: true)
    }

Cell的自適應性跟動態調整

前提:如果不對Cell進行Auto Layout的話就無法使用 Self Sizing Cell.

第一行為設定Cell估算的列高
第二行是將rowHeight屬性改為UITableViewAutomaticDimension

        tableView.estimatedRowHeight = 36.0
        tableView.rowHeight = UITableViewAutomaticDimension

最後一個步驟是將Label的Lines值設定為0

背景圖案加上模糊特效

流程為:建立一個UIVisualEffectView物件加上模糊特效, 接著加上一個視覺特效視圖(Visual effect view) 至背景圖像視圖. UIBlurEffect 提供三種不同的樣式:Dark, Light, ExtraLight.

override func viewDidLoad() {
        super.viewDidLoad()

        let blurEffect = UIBlurEffect(style: .Dark)
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.frame = view.bounds
        backgroundImageView.addSubview(blurEffectView)
    }

UIView Animation

在iOS中, 只需要提供動畫的起始與終止狀態, UIView就會幫忙建立動畫. 也提供變形的函數, 讓你可以縮放, 旋轉與移動圖.

縮放視圖的方式是建立一個CGAffineTransformMakeScale, 並設定UIView物件的transform屬性.

    ratingStackView.transform = CGAffineTransformMakeScale(0.0, 0.0)

當他第一次載入時, 堆疊視圖縮小:

override func viewDidAppear(animated: Bool) {
        UIView.animateWithDuration(0.4, delay: 0.0, options: [], animations: {
            self.ratingStackView.transform = CGAffineTransformIdentity
        }, completion: nil)
    }

在視圖載入後, 就將動畫載入進來, 因此我們需要一個animation block至viewDidAppear方法內. 動畫持續時間0.4秒. CGAffineTransformIdentity是重新設定一個View至原來大小以及位置的常數.

Spring Animation

Damping: 控制當動畫來到終止狀態時彈性的阻力(0 -> 1)
usingSpringWithDamping: 指定了初始的彈性速度.

UIView.animateWithDuration(0.5, delay: 0.0, usingSpringWithDamping:0.3, initialSpringVelocity: 0.5, options: [], animations: {
            self.ratingStackView.transform = CGAffineTransformIdentity
        }, completion: nil)

Slide-Up Animation

對於向上滑動的視圖, 我們先將堆疊視圖移開畫面再將它移回原來的位置.

CGAffineTransformMakeTranslation(x,y)

兩種變換方式的合併

利用以下方式可以將兩種變換合為一種

CGAffineTransformConcat(transform1, tramsform2)

ex.

let scale = CGAffineTransformMakeScale(0.0, 0.0)
let translate = CGAffineTransformMakeTranslation(0, 500)
self.ratingStackView.transform = CGAffineTransformConcat(scale, translate)

Unwind Segue

將資料回傳給前一個View

官方教學:
https://developer.apple.com/library/ios/technotes/tn2298/_index.html
http://blog.csdn.net/kid_devil/article/details/23218195 (中文)

沒有留言:

張貼留言