4

저는 사용자가 이미지에서 손가락 주위를 움직일 때 알파 레벨을 0으로 설정하여 이미지의 일부분을 투명하게 만들 필요가있는 하나의 iPhone App에서 작업하고 있습니다. 기본적으로 앱 스토어 응용 프로그램 iSteam을 알게 된 경우 사용자는 배경 이미지를 투명하게 만들 수있는 상단 이미지에서 손가락을 움직일 수 있어야합니다.이미지를 투명하게 만들기 위해 UIImageView 위에 그려야합니다.

현재 두 개의 UIImageView를 사용하고 있습니다. 하나는 배경 이미지를 보유하고 다른 하나는 어두운 이미지를 보유하는 배경 이미지를 보유합니다. 이제 사용자는 배경 이미지의 일부를 맨 위에 표시 할이 어두운 이미지에 임의의 커브를 그릴 수 있어야합니다. 두 개의 UIImageView 중 최상위 이미지가 차지하는 최상위 이미지를 투명하게 만드는 방법을 알아낼 수 없습니다.

이것에 대한 아이디어가 있으십니까? 또한 이것을 위해 무엇을 사용해야합니까? 석영 또는 Open GL. 나는 iPhone App Dev의 초보자이며이 API들에 대한 전혀 몰라서 전문가들의 조언에 따라 iPhone SDK 개발에 앞장서겠습니다.

답변

3

UIImageView는 layer으로 참조 할 수있는 레이어가 있으며 프로젝트를 QuartzCore에 연결할 때 대화 할 수 있습니다. 사용자가 손가락을 움직이면 UIImageView와 같은 크기의 불투명 한 색상으로 채워진 그래픽 컨텍스트에서 명확한 모양을 잘라내 CGImageRef로 변환하고 CALayer의 contents으로 설정합니다 (다시이 CALayer는 UIImageView)로 설정하고 해당 레이어를 UIImageView의 layer.mask으로 설정합니다. 마스크가 선명하지 않은 곳에서는 레이어에 투명한 구멍을 뚫습니다. 이는 UIImageView가 보여주는 이미지를 의미하는 뷰를 의미합니다. (UIImageView가 레이어 간섭을 좋아하지 않으므로 UIImageView가 작동하지 않으면 대신 UIImageView의 superview를 사용할 수 있습니다.)

EDIT (다음 날) - 다음은 레이어의 위임자에 대한 샘플 코드입니다. 중앙에 원형의 구멍을 펀치 :

-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)c { 
    CGRect r = CGContextGetClipBoundingBox(c); 
    CGRect r2 = CGRectInset(r, r.size.width/2.0 - 10, r.size.height/2.0 - 10); 

    UIImage* maskim; 
    { 
     UIGraphicsBeginImageContextWithOptions(r.size, NO, 0); 
     CGContextRef c = UIGraphicsGetCurrentContext(); 
     CGContextAddEllipseInRect(c, r2); 
     CGContextAddRect(c, r); 
     CGContextEOClip(c); 
     CGContextSetFillColorWithColor(c, [UIColor blackColor].CGColor); 
     CGContextFillRect(c, r); 
     maskim = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
    } 

    CALayer* mask = [CALayer layer]; 
    mask.frame = r; 
    mask.contents = (id)maskim.CGImage; 
    layer.mask = mask; 
} 

따라서, 그 층은 도면의 층이고, 상기 UIImageView에 해당 하위 뷰 뷰의 경우, 구멍이있는 UIImageView 펀칭되는 경우. 내가 지금 당신의 생각을 다할 것입니다 @ 매트

image with a hole punched in it

+0

감사 : 여기

은 결과의 스크린 샷입니다 –

관련 문제