UI 요소에 CIFilter를 적용하고 싶습니다. .filters 멤버를 통해 뷰 레이어에 적용하려고했습니다. 그러나 필터가 적용되지 않습니다.UI 요소에 CIFilter 적용
0
A
답변
1
UIGraphicsGetImageFromCurrentImageContext
을 사용하여 UIImage
을 생성하고 필터를 적용한 다음 원래 이미지 위에 필터링 된 이미지가 포함 된 이미지보기를 오버레이합니다. 아주 간단
UIView의 흐리게 표현을 얻고있다 : 여기
는 흐림 ( taken from my blog)과는 그 수있는 방법 내가, 이미지 컨텍스트를 시작으로 렌더링 할 뷰의 레이어의 renderInContext 방법을 사용할 필요가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)
:
UIGraphicsBeginImageContextWithOptions(CGSize(width: frame.width, height: frame.height), false, 1)
layer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
나는 이미지가 채워했다면, 그것으로 가우시안 블러를 적용 할 수있는 매우 표준 워크 플로우의 : 컨텍스트는 다음 컨텍스트에서있는 UIImage를 얻을 수
흐린 이미지는 입력 이미지보다 커질 것이므로 createCGImage
에서 필요한 크기에 대해 명시해야합니다.
다음 단계는 UIImageView
을 내보기에 추가하고 다른 모든보기를 숨기는 것입니다. 그것을 제거에 올 때, 나는 제거 아니에요 확신 할 수 있도록 내가 BlurOverlay
에 UIImageView
를 서브 클래 싱 한 UIImageView
기존 :
let blurOverlay = BlurOverlay()
blurOverlay.frame = boundingRect
blurOverlay.image = filteredImage
subviews.forEach{ $0.hidden = true }
addSubview(blurOverlay)
이-흔들림이 끊긴 부하에 올 때, 나는 마지막을 보장 할
,691 : 그냥 마지막 서브 뷰가BlurOverlay
있는지 확인해야합니다, 마지막으로
func unBlur()
{
if let blurOverlay = subviews.last as? BlurOverlay
{
blurOverlay.removeFromSuperview()
subviews.forEach{ $0.hidden = false }
}
}
하는 UIView
있는지 확인하기 위해 현재 흐리게한다 : 서브 뷰 내 BlurOverlay
를 제거하고 숨기기를 취소 기존의보기 중 하나입니다
var isBlurred: Bool
{
return subviews.last is BlurOverlay
}
관련 문제
- 1. UIImageView에 CIFilter 적용
- 2. UIImagePickerController 피드에 CIFilter 적용
- 3. UI 요소에 여러 변형 적용
- 4. CIFilter to NSImage 오류 적용
- 5. AOP 및 UI 요소에 보안 적용
- 6. 많은 요소에 동일한 UI 변경 적용
- 7. textarea 요소에 JQuery UI CSS 적용
- 8. 동영상 파일에 CIFilter 적용 및 저장
- 9. 즉시 DOM 요소에 위젯 적용
- 10. CIFilter HueAdjust
- 11. load()로 대체 된 요소에 jQuery UI 버튼 스타일 적용
- 12. CSS : 요소에 속성 적용
- 13. 요소에 그라디언트 레이어 적용
- 14. 요소에 미디어 쿼리 적용
- 15. 요소에 여백 바닥 적용
- 16. th 요소에 여백 적용
- 17. 특정 요소에 ligature.js 적용
- 18. d3js에서이 요소에 애니메이션 적용
- 19. 페이지 요소에 jQuery UI 사용
- 20. 복제 된 요소에 jQuery 자동 완성 적용
- 21. CIFilter +있는 UIImage + 알파 마스크
- 22. Asynctask에서 UI 요소에 액세스하십시오.
- 23. ui 대화 상자 단추 적용 함수 적용
- 24. Swift에서 CoreAnimation으로 UILabel 요소에 애니메이션 적용
- 25. 제스처 인식기를 모든보기 구성 요소에 적용 하시겠습니까?
- 26. jquery 여러 요소에 애니메이션 적용
- 27. dom 요소에 jquery 플러그인 적용
- 28. 여러 요소에 Knockout.js 모델 적용
- 29. 폴리머 요소에 애니메이션 애니메이션 적용
- 30. 배열의 요소에 변경 사항 적용
당신의 답을 기다려주십시오. 그것이 내가하고 싶은 일입니다. MKMapView에서 필터 (원근감 변환)를 적용해야합니다. 그 때 무엇을 권하겠습니까? 사용자 상호 작용이있을 필요는 없습니다. MapView를 뷰에 추가하지 말고 단순히 말한대로 이미지를 얻는 것입니다. 그러나 MapView를 프로그래밍 방식으로 회전하여 움직이는 동안 특정 프레임 속도를 가져야합니다. 보기를 이동하면서 더 많은 이미지를 얻으려면 어떻게해야합니까? – Lenny1357
이미지를 3D로 회전하려면 이미지를 평면에 적용한 SceneKit 머티리얼의 확산 내용으로 사용하지 않는 이유는 무엇입니까? 원근감 변환의 포인트를 애니메이트하려면'CADisplayLink'를보십시오 (하지만 SceneKit으로 더 재미있는 결과를 얻을 것입니다 :)). –
MapView를 지리적 좌표로 회전 시키십시오. 좌표 주위의 회전은 적용된 필터로 표시되어야합니다. 간단한 이미지는이 경우에 트릭을하지 않을 것입니다. 적용된 CIFilter를 사용하여 MapView가 자체적으로 관리하는 순환 게재를 표시하려면 무엇을 제안 하시겠습니까? 비디오에 CIFilter를 적용하는 것과 같지만 제 경우에는 보여주고 자하는 MapView 자체의 애니메이션입니다. 나는 sth이 필요할 것이다. PixelBuffer와 같습니다. 불행히도 MapView를 설정할 수 없다고 생각합니다. – Lenny1357