你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS編程技術 >> 在iOS上實現變換

在iOS上實現變換

編輯:IOS編程技術

  形狀的繪制沒有問題,但我們有時希望能夠處理稍微復雜一些的東西,比如旋轉或拉伸一個形狀。當然可以通過提供不同的坐標來直接創建新的路徑,但要求iOS替我們完成旋轉通常會更好一些。

  為此,我們使用變換,變換就是變換矩陣的表示,通常可以對內容進行任何形式的變形和操控。

  無論你的代碼進行什麼樣的繪制操作,都會受到道歉轉換矩陣(CTM)的影響,它會對每條路徑及所執行的繪制操作進行變換。默認情況下,變換矩陣是單位矩陣,也就是說它不做任何工作。但是,可以修改CTM以影響繪制過程。

  要修改CTM,首先要對低級繪制上下文的引用。這個上下文是在調用drawRect(rect:)方法之前由Cocoa為你設置的,它是CGContextRef類型。在iOS上,可以用以下代碼獲取此上下文:

var context = UIGraphicsGetCurrentContext()

  有了上下文,就可以修改CTM了。在下面的例子中,我們將修改CTM,使繪制出來的所有內容都圍繞原點旋轉一定的角度。

 說明:如果修改了CTM,這一變化將一直持續到恢復上下文的狀態為止。如果只需要旋轉部分繪制內容,應當在修改CTM之前保存上下文的狀態,在完成旋轉之後恢復狀態。

代碼如下:

//: Playground - noun: a place where people can play

import UIKit

class MyView : UIView{
    override func drawRect(rect: CGRect) {
        var pathRect = CGRectInset(self.bounds, self.bounds.size.width*0.1, self.bounds.size.height*0.1)
        let cornerRadius : CGFloat = 20.0
        
        var rotationTransform = CGAffineTransformMakeRotation(CGFloat(M_PI)/4.0)
        
        var rectanglePath = UIBezierPath(roundedRect: pathRect, cornerRadius: cornerRadius)
        
        var context = UIGraphicsGetCurrentContext()
        
        CGContextSaveGState(context)
        
        CGContextConcatCTM(context, rotationTransform)
        
        UIColor.redColor().setFill()
        rectanglePath.fill()
        
        CGContextRestoreGState(context)
    }
}

let viewRect = CGRect(x: 0, y: 0, width: 100, height: 100)
let myEmptyView = MyView(frame:viewRect)
myEmptyView.backgroundColor = UIColor.clearColor()

  效果圖:

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved