Swift3.0
//
// ViewController.swift
// UIKit061
//
// Created by Misato Morino on 2016/08/15.
// Copyright © 2016年 Misato Morino. All rights reserved.
//
import UIKit
extension UIView {
func GetImage() -> UIImage{
// キャプチャする範囲を取得.
let rect = self.bounds
// ビットマップ画像のcontextを作成.
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
let context: CGContext = UIGraphicsGetCurrentContext()!
// 対象のview内の描画をcontextに複写する.
self.layer.render(in: context)
// 現在のcontextのビットマップをUIImageとして取得.
let capturedImage : UIImage = UIGraphicsGetImageFromCurrentImageContext()!
// contextを閉じる.
UIGraphicsEndImageContext()
return capturedImage
}
}
class ViewController: UIViewController {
var myLabel: UILabel!
var myImageView: UIImageView!
override func viewDidLoad() {
// Labelを生成.
myLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
myLabel.text = "test"
myLabel.textColor = UIColor.white
myLabel.layer.cornerRadius = 50.0
myLabel.layer.masksToBounds = true
myLabel.backgroundColor = UIColor.blue
myLabel.textAlignment = NSTextAlignment.center
myLabel.layer.position = CGPoint(x: self.view.frame.width/2, y: self.view.frame.height/2 - 100)
// ImageViewを生成.
myImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 150, height: 150))
myImageView.layer.borderColor = UIColor.black.cgColor
myImageView.layer.position = CGPoint(x: self.view.frame.width/2, y: self.view.frame.height - 200)
myImageView.layer.borderWidth = 0.5
// Buttonを生成.
let myButton = UIButton(frame: CGRect(x: 0, y: 0, width: 50, height: 20))
myButton.setTitle("push", for: UIControlState.normal)
myButton.setTitleColor(UIColor.blue, for: UIControlState.normal)
myButton.addTarget(self, action: #selector(ViewController.onClickMyButton(sender:)), for: UIControlEvents.touchUpInside)
myButton.layer.position = CGPoint(x: self.view.frame.width/2, y: self.view.frame.height - 50)
// viewにそれぞれを追加.
self.view.addSubview(myLabel)
self.view.addSubview(myImageView)
self.view.addSubview(myButton)
}
/*
Buttonが押された時に呼ばれるメソッド.
*/
func onClickMyButton(sender: UIButton) {
// キャプチャ画像を取得.
let myImage = myLabel.GetImage() as UIImage
// ImageViewのimageにセット.
myImageView.image = myImage
// 縦横比率を保ちつつ画像をUIImageViewの大きさに合わせる.
myImageView.contentMode = UIViewContentMode.scaleAspectFit
}
}
Swift 2.3
//
// ViewController.swift
// UIKit061
//
// Created by Misato Morino on 2016/08/15.
// Copyright © 2016年 Misato Morino. All rights reserved.
//
import UIKit
extension UIView {
func GetImage() -> UIImage{
// キャプチャする範囲を取得.
let rect = self.bounds
// ビットマップ画像のcontextを作成.
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
let context: CGContextRef = UIGraphicsGetCurrentContext()!
// 対象のview内の描画をcontextに複写する.
self.layer.renderInContext(context)
// 現在のcontextのビットマップをUIImageとして取得.
let capturedImage : UIImage = UIGraphicsGetImageFromCurrentImageContext()
// contextを閉じる.
UIGraphicsEndImageContext()
return capturedImage
}
}
class ViewController: UIViewController {
var myLabel: UILabel!
var myImageView: UIImageView!
override func viewDidLoad() {
// Labelを生成.
myLabel = UILabel(frame: CGRectMake(0, 0, 100, 100))
myLabel.text = "test"
myLabel.textColor = UIColor.whiteColor()
myLabel.layer.cornerRadius = 50.0
myLabel.layer.masksToBounds = true
myLabel.backgroundColor = UIColor.blueColor()
myLabel.textAlignment = NSTextAlignment.Center
myLabel.layer.position = CGPointMake(self.view.frame.width/2, self.view.frame.height/2 - 100)
// ImageViewを生成.
myImageView = UIImageView(frame: CGRectMake(0, 0, 150, 150))
myImageView.layer.borderColor = UIColor.blackColor().CGColor
myImageView.layer.position = CGPointMake(self.view.frame.width/2, self.view.frame.height - 200)
myImageView.layer.borderWidth = 0.5
// Buttonを生成.
let myButton = UIButton(frame: CGRectMake(0, 0, 50, 20))
myButton.setTitle("push", forState: UIControlState.Normal)
myButton.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
myButton.addTarget(self, action: #selector(ViewController.onClickMyButton(_:)), forControlEvents: UIControlEvents.TouchUpInside)
myButton.layer.position = CGPointMake(self.view.frame.width/2, self.view.frame.height - 50)
// viewにそれぞれを追加.
self.view.addSubview(myLabel)
self.view.addSubview(myImageView)
self.view.addSubview(myButton)
}
/*
Buttonが押された時に呼ばれるメソッド.
*/
func onClickMyButton(sender: UIButton) {
// キャプチャ画像を取得.
let myImage = myLabel.GetImage() as UIImage
// ImageViewのimageにセット.
myImageView.image = myImage
// 縦横比率を保ちつつ画像をUIImageViewの大きさに合わせる.
myImageView.contentMode = UIViewContentMode.ScaleAspectFit
}
}
2.3と3.0の差分
CGRectMakeが廃止
CGContextRef ではなく CGContext を使う
Be the first to comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.