- 設(shè)置某些角為圓角, 使用UIBezierPath
let layer = CAShapeLayer()
// 這里byRoundingCorners -> 指定圓角
layer.path = UIBezierPath(roundedRect: testView.bounds, byRoundingCorners: [UIRectCorner.TopLeft, .TopRight], cornerRadii: CGSize(width: 20, height: 20)).CGPath
testView.layer.mask = layer
- 設(shè)置view的四個角都為圓角, 最簡單的方法, 使用當然最簡單的某些情況下肯定就是不適合的, 因為這個方法會觸發(fā)離屏渲染, 如果界面中有大量的圓角view的處理, 會出現(xiàn)掉幀的"現(xiàn)象"
testView.layer.cornerRadius = 20.0
testView.layer.masksToBounds = true
- 縮放圖片
// 縮放圖片
func resizeImage(image: UIImage, toWidth width: CGFloat, withHeight height: CGFloat) -> UIImage {
let size = CGSize(width: width, height: height)
// 開啟一個上下文
/// 設(shè)置為false 表示背景不透明 -> 黑色
/// 設(shè)置為 0 -> 可以自適應(yīng)不同的屏幕的scale顯示
UIGraphicsBeginImageContextWithOptions(size, false, 0)
// 獲取上下文
let context = UIGraphicsGetCurrentContext()
// 轉(zhuǎn)換坐標原點到左下角
CGContextTranslateCTM(context, 0.0, height)
CGContextScaleCTM(context, 1.0, -1.0)
// 設(shè)置繪制模式
CGContextSetBlendMode(context, .Copy)
// 繪圖
CGContextDrawImage(context, CGRect(origin: CGPointZero, size: size), image.CGImage)
// 取得圖片
let retrivedImage = UIGraphicsGetImageFromCurrentImageContext()
// 結(jié)束上下文
UIGraphicsEndImageContext()
return retrivedImage
}
// 縮放圖片
func resizeImage(image: UIImage, toWidth width: CGFloat, withHeight height: CGFloat) -> UIImage {
let size = CGSize(width: width, height: height)
// 開啟一個上下文
/// 設(shè)置為false 表示背景不透明 -> 黑色
/// 設(shè)置為 0 -> 可以自適應(yīng)不同的屏幕的scale顯示
UIGraphicsBeginImageContextWithOptions(size, false, 0)
/// 繪制圖片
image.drawInRect(CGRect(origin: CGPointZero, size: size))
// 取得圖片
let retrivedImage = UIGraphicsGetImageFromCurrentImageContext()
// 結(jié)束上下文
UIGraphicsEndImageContext()
return retrivedImage
}
- 截屏功能
func snapView(targetView: UIView) -> UIImage {
UIGraphicsBeginImageContextWithOptions(targetView.bounds.size, false, 0)
// iOS7.0 之后系統(tǒng)提供的截屏的功能
targetView.drawViewHierarchyInRect(targetView.bounds, afterScreenUpdates: false)
let snapdImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return snapdImage
}
//這個方法會返回一個"截屏"后的view
// withCapInsets -> 這個和拉伸圖片的image.resizableImageWithCapInsets()使用一樣
let snapShotView = view.resizableSnapshotViewFromRect(view.bounds, afterScreenUpdates: false, withCapInsets: UIEdgeInsetsZero)
func snapView(targetView: UIView) -> UIImage {
UIGraphicsBeginImageContextWithOptions(targetView.bounds.size, false, 0.0)
// 區(qū)分和4.1中的使用
targetView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
- 剪裁圖片的指定部分
func cutImage(image: UIImage, cutRect: CGRect) -> UIImage {
UIGraphicsBeginImageContextWithOptions(cutRect.size, false, 0.0)
// 獲取上下文
let context = UIGraphicsGetCurrentContext()
// 轉(zhuǎn)換坐標原點到左下角
CGContextTranslateCTM(context, 0.0, cutRect.size.height)
CGContextScaleCTM(context, 1.0, -1.0)
// 設(shè)置繪制模式
CGContextSetBlendMode(context, .Copy)
// 繪圖
CGContextDrawImage(context, cutRect, image.CGImage)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
func cutImage(image: UIImage, cutRect: CGRect) -> UIImage {
UIGraphicsBeginImageContextWithOptions(cutRect.size, false, 0.0)
// 獲取上下文
let context = UIGraphicsGetCurrentContext()
image.drawInRect(cutRect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
- 將顏色繪制為圖片
func imageFromColor(color: UIColor, size: CGSize) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
let rect = CGRect(origin: CGPointZero, size: size)
color.setFill()
UIRectFill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
func imageFromColor(color: UIColor, size: CGSize) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
let rect = CGRect(origin: CGPointZero, size: size)
// color.setFill()
// UIRectFill(rect)
let context = UIGraphicsGetCurrentContext()
CGContextSetFillColorWithColor(context, color.CGColor)
CGContextFillRect(context, rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
如果你覺得平時很少接觸過Quartzs 2D來繪圖, 可能看上面的代碼不是很明白, 如果想要更清楚, 建議閱讀相關(guān)的繪圖教程, 同時下一篇可能會簡單分享一下使用Quartzs 2D來繪圖的相關(guān)知識, 歡迎關(guān)注