Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 655 - longPressed()の実装はこれから

次のTable Viewのチュートリアルを拡張しています。

yataiblue.hatenablog.com

ロングプレスジェスチャーが発動されて「state」が「.Began」の時にUITableViewCellクラスからスナップショットとなるUIViewクラスを作り出すカスタムメソッドをViewController内に定義します。

func snapshotOfCell(inputView: UIView) -> UIView {
  UIGraphicsBeginImageContextWithOptions(inputView.bounds.size, 
                           false, 0.0)
  inputView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
  
  let image = UIGraphicsGetImageFromCurrentImageContext() as UIImage
  UIGraphicsEndImageContext()
        
  let cellSnapshot : UIView = UIImageView(image: image)
  cellSnapshot.layer.masksToBounds = false
  cellSnapshot.layer.cornerRadius = 0.0
  cellSnapshot.layer.shadowOffset = CGSizeMake(-5.0, 0.0)
  cellSnapshot.layer.shadowRadius = 5.0
  cellSnapshot.layer.shadowOpacity = 0.4
  return cellSnapshot
 }

理解できていないクラス概念が出てきました。「UIGraphicsBeginImageContextWithOptions()」とは何だ?「ビットマップイメージのcontext(背景)を作って、
「UIGraphicsGetCurrentContexts()」を使って、たった今作った空のビットマップイメージcontext(背景)をinoutViewのlayerに組み込んでcontext(背景)に設定するという説明でいいのでしょうか?

今までUIKitで用意されている部品(UIViewをベースとした、UIImage, UIButton, etc)を標準で使う限り、「layer」とか「context」を意識する必要がなかったので初心者向けのチュートリアルで説明されることはありません。

しかし、UIViewの標準的な表示を越えて、独自の表現(見え方)をしたい場合、UIViewのlayerを使用することになります。

ここまでは何となく理解できます。

今日はここまで。