비슷한 질문을 보았지만 실행 가능한 답변을 찾지 못했습니다.iOS에서 UIView를 마스크하는 방법
회색 이미지 (마스크 용 알파 스케일로 변환해야 함)를 사용하여 UIView를 마스크하려고합니다. UIView 배경이 있습니다. 이미지를 마스킹하기 쉬워야하지만 모든 UIView를 가리고 싶습니다.
실마리가 있습니다.
비슷한 질문을 보았지만 실행 가능한 답변을 찾지 못했습니다.iOS에서 UIView를 마스크하는 방법
회색 이미지 (마스크 용 알파 스케일로 변환해야 함)를 사용하여 UIView를 마스크하려고합니다. UIView 배경이 있습니다. 이미지를 마스킹하기 쉬워야하지만 모든 UIView를 가리고 싶습니다.
실마리가 있습니다.
저는이 문제에 대해 2 시간 동안 노력해 왔으며 원하는대로 할 수 있다고 생각합니다. 먼저, 귀하가 적합하다고 생각하는 것을 사용하여 마스킹 이미지를 만듭니다. 여기서 알파 값 만 필요하므로 다른 모든 색상은 무시되므로 사용하는 메서드가 알파 값을 지원하는지 확인하십시오. 이 예제에서는 .png 파일에서로드하지만 알파 값이 없으므로 .jpg 파일로 시도하지 마십시오.
다음, 새 레이어를 만들고 그 내용에 마스크를 할당과 같이, 당신의 UIView 자신의 레이어에 새로운 레이어를 설정 : 당신이 찾아야하는이 마스크의 UIView와 연결된 모든 서브 뷰 :
UIImage *_maskingImage = [UIImage imageNamed:@"mask"];
CALayer *_maskingLayer = [CALayer layer];
_maskingLayer.frame = theView.bounds;
[_maskingLayer setContents:(id)[_maskingImage CGImage]];
[theView.layer setMask:_maskingLayer];
이렇게하면 UIView의 배경색을 원하는대로 설정할 수 있고 마스크를 사용하여 컬러 필터를 만들 수 있습니다.
편집 : 이제 iOS8에서 maskView 속성에 다른보기를 할당하여보기를 마스킹 할 수 있습니다. maskView의 알파 레이어가 적용된 뷰의 불투명도를 결정하는 데 사용된다는 점에서 일반적인 규칙은 그대로 유지됩니다.
내 머리 꼭대기에서 정확한 코드를 모르지만 기본 아이디어는 두 개의 UIView를 갖는 것입니다. 하나의 UIView는 그레이 스케일 이미지로 설정된 이미지 속성을 가지며 다른 UIView는 보통대로 설정됩니다. 유일한 차이점은 "정상"이미지가 포함 된 UIView 위에 직접 초기 UIView를 배치한다는 것입니다.
아이디어를 한 걸음 더 전하기에 충분할 것으로 기대합니다.
감사를보기가 @IBOutlet으로 정의된다
func scrollViewWillBeginDragging(scrollView: UIScrollView) { exerDetailsTableView.maskView = nil }
. 분명히하지는 않았지만, 원하는 것은 그레이 스케일 이미지를 알파 이미지로 변환하고 (보통의 마스킹처럼) UIView에 적용하는 것입니다. – subchap
iOS 8.0 이상을 타겟팅하는 앱의 경우 효과가있었습니다 (이 경우 그라디언트를 마스크로 사용함). 마스크 크기를 조정하거나 위치를 지정할 필요가 없습니다.
// Add gradient mask to view
func AddGradientMask(targetView: UIView)
{
let gradientMask = CAGradientLayer()
gradientMask.frame = targetView.bounds
gradientMask.colors = [UIColor.blackColor().CGColor, UIColor.clearColor().CGColor]
gradientMask.locations = [0.8, 1.0]
let maskView: UIView = UIView()
maskView.layer.addSublayer(gradientMask)
targetView.maskView = maskView
}
내 경우에는 사용자가 스크롤을 시작하면 마스크를 제거하고 싶습니다. 이 작업은 이루어집니다 :
@IBOutlet weak var exerDetailsTableView: UITableView!
결과 : 귀하의 답변에 대한
답변 해 주셔서 감사합니다. 문제는 그레이 스케일 (모든 점에 대해 알파 == 1) 이미지 만 있습니다. 그레이 스케일 이미지를 알파 이미지로 변환하고 싶습니다. 너는 어떤 생각을 가지고 있니? – subchap
글쎄, 최선의 방법은 Photoshop과 같은 이미지 편집 도구로 가져 와서 변환하는 것입니다. 대안은 새 이미지 컨텍스트를 만든 다음 회색 구성 요소를 읽는 이전 이미지에서 픽셀별로 진행하고이를 새 이미지에 플로팅하기 전에 새 색상의 알파 구성 요소로 변환하여 프로그래밍 방식으로 수행하는 것입니다 .페인트 패키지로 처리하는 데 드는 시간을 줄이면 시간 낭비와 번거 로움이 있습니다. – Ash
포토샵에서는 쉽게 할 수 있습니다. (1) 새 레이어 만들기 (2) 검정색 부분으로 채우기 (3) 레이어 마스크를 지정하고 (4) 그레이 스케일 이미지를 마스크로 지나치십시오. 검정 = 투명, 흰색 = 불투명, 회색은 투명도가 다양합니다. (5) 레이어 마스크를 적용합니다. (레이어 패널에서 마스크 자체를 마우스 오른쪽 버튼으로 클릭하고 '레이어 마스크 적용'을 클릭합니다.) (6) 필요한 레이어 부분을 잘라냅니다. –