UIエレメントにCIFilterを適用したい。私はそれを.filtersメンバ経由でviewsレイヤーに適用しようとしました。しかし、フィルターは適用されません。UIエレメントにCIFilterを適用する
0
A
答えて
1
UIGraphicsGetImageFromCurrentImageContext
を使用してUIImage
を生成し、それにフィルタを適用して、元のコンポーネントにフィルタされた画像を含む画像ビューをオーバーレイします。ここで
は、ぼかし(taken from my blog)であることを行う方法です:
のUIViewのぼやけた表現を取得するには非常に単純です:私はにレンダリングするためにビューのレイヤーのrenderInContextメソッドを使用し、画像のコンテキストを開始する必要がありますその後、コンテキストおよびコンテキストからUIImageを取得:
UIGraphicsBeginImageContextWithOptions(CGSize(width: frame.width, height: frame.height), false, 1)
layer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
私は画像が取り込またら、それはそれにガウスぼかしを適用するにはかなり標準的なワークフローです:
guard let blur = CIFilter(name: "CIGaussianBlur") else
{
return
}
blur.setValue(CIImage(image: image), forKey: kCIInputImageKey)
blur.setValue(blurRadius, forKey: kCIInputRadiusKey)
let ciContext = CIContext(options: nil)
let result = blur.valueForKey(kCIOutputImageKey) as! CIImage!
let boundingRect = CGRect(x: -blurRadius * 4,
y: -blurRadius * 4,
width: frame.width + (blurRadius * 8),
height: frame.height + (blurRadius * 8))
let cgImage = ciContext.createCGImage(result, fromRect: boundingRect)
let filteredImage = UIImage(CGImage: cgImage)
ぼやけた画像は入力画像より大きくなりますので、私はcreateCGImage
で必要なサイズについて明示する必要があります。
次の手順は、UIImageView
を追加して他のすべてのビューを非表示にすることです。それはそれを取り除くに来るとき、私は既存のUIImageView
を削除していないよ確認することができますように、私はBlurOverlay
にUIImageView
をサブクラス化しました:
let blurOverlay = BlurOverlay()
blurOverlay.frame = boundingRect
blurOverlay.image = filteredImage
subviews.forEach{ $0.hidden = true }
addSubview(blurOverlay)
それが解除ぼかしになると、私は最後のを確実にしたいです
:func unBlur()
{
if let blurOverlay = subviews.last as? BlurOverlay
{
blurOverlay.removeFromSuperview()
subviews.forEach{ $0.hidden = false }
}
}
最後に、UIView
が現在ぼやけているかどうかを確認するために、私はちょうどその最後のサブビューがBlurOverlay
であるかどうかを確認する必要があります。サブビューは私BlurOverlay
それを削除し、既存のビューを再表示の一つであります
var isBlurred: Bool
{
return subviews.last is BlurOverlay
}
関連する問題
- 1. Spotify - チェックボックスUIエレメントの使用
- 2. Vue.js - ローディングサービス - エレメントUI
- 3. 別のUIエレメント
- 4. ビデオファイルにCIFilterを適用して保存する
- 5. 適応閾値CIKernel/CIFilter iOS
- 6. AndroidデザインUIエレメントPSD
- 7. Objective-C:カスタムUIエレメント
- 8. UIAutomatorを使用してUIエレメントを無効にする
- 9. ダーツのポリマーUIエレメントの使用
- 10. 親エレメントにのみトランスフォームを適用するには?
- 11. ビデオにCIFilterを正しく適用しない
- 12. Aフレーム内のUIエレメント/コントロール
- 13. コード対応HTML UIエレメントPHP
- 14. スケッチUIエレメントをXcodeに直接使用できますか?
- 15. このiOS UIエレメントとは何ですか、どのようにしてUIエレメントを作成しますか?
- 16. CIFilterのCIImageをCIFilterで使用する:空のイメージを取得する
- 17. タップ時にエレメントにCSSスタイルを適用、親から独立
- 18. jQuery UIダイアログをクラスに適用する
- 19. OpenGLのレンダリングからテクスチャへのCIFilterの適用
- 20. Three.jsでWebGLエリアにUIエレメントを直接描画する
- 21. iosでUIエレメントを作成して動的に追加する
- 22. Flash Builder(Flex) - UIエレメントを非表示にする
- 23. ピアノスタイルのUIエレメントにアクセシビリティを追加する
- 24. liエレメントにdisplayプロパティを適用できません
- 25. コードでアンカープリセットを使用してUIエレメントを配置
- 26. JSONのjquery UIエレメントの状態
- 27. WPFのUIエレメント(内部エキスパンダー)を名前で取得する
- 28. iOSアクセシビリティ - 同じUIエレメントをループ内で再現するボイスオーバー
- 29. メインセンターのUIエレメントを更新するためのNotificationCenterポスト?
- 30. イベントハンドラを使用してエレメントを別のエレメントにコピーする方法
あなたの答えはあなたです。それはまさに私がやりたいことです。 MKMapViewにフィルタ(透視変換)を適用する必要があります。そうするために何をお勧めしますか?ユーザーインタラクションはそこにある必要はありません。あなたが言ったように、MapViewをViewに追加することはなく、単純にそのイメージを取得することを考えています。しかし、私はMapViewをプログラム的に回転させるので、移動中にあるフレームレートを持つはずです。ビューを動かしている間に、もっと画像を取得するにはどうすればいいですか? – Lenny1357
イメージを3Dで回転させたい場合、平面に適用されたSceneKitマテリアルの拡散コンテンツとしてイメージを使用してみませんか?もし透視変換のポイントをアニメートしたいのであれば、 'CADisplayLink'を見てください(しかし、あなたはSceneKitでもっと楽しい結果を得られます:))。 –
MapViewを地理座標の周りに回転させます。座標の周りの回転は、適用されたフィルターで表示される必要があります。この場合、簡単なイメージではそのトリックはできません。適用されたCIFilterでMapViewが単独で管理するローテーションを表示できるようにするにはどうしたらよいでしょうか?これは、ビデオにCIFilterを適用するようなものですが、私の場合は、それを示すMapView自体のアニメーションです。私はsthが必要です。 PixelBufferのように。残念ながら、MapViewに設定することはできないと思います。 – Lenny1357