4

我正在使用一個iPhone應用程序,其中我需要通過將圖像的alpha級別設置爲0來使圖像的一部分透明,因爲用戶在圖像上移動他的手指。基本上,如果你碰巧知道應用商店應用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的超級視圖來代替。)

編輯(第二天) - 下面是圖層委託的示例代碼,衝頭在中心的圓形孔:

-(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

感謝@馬特,我會嘗試你的想法,現在 – 2011-12-26 04:07:34