2009-11-19 90 views
4

我一直在尋找掩蓋iPhone上圖像的方法。我碰到這個解決方案「掩蔽」動畫? iPhone SDK

http://iosdevelopertips.com/cocoa/how-to-mask-an-image.html

這對於靜態圖像的偉大工程。我想要做的是在UIImageView中掩蓋動畫。從我讀過的內容來看,我認爲這是不可能的,同時也實現了不錯的幀速率。

這導致我問以下是否可能,我可以「剪輯」在UIImageView內的圖像?即不重新調整大小的UIImageView圖像的大小,所以一些部分被砍掉?

回答

8

我還沒有嘗試過這樣的性能,但你可以使用核心動畫層作爲掩碼。您可以定義要在CAShapeLayer中使用的路徑並填充該形狀。然後指定你的UIImageView圖層的圖層蒙版。例如:

CGMutablePathRef path = CGPathCreateMutable(); 
// build the path by adding points 
// ... 

CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init]; 
[shapeLayer setPath:path]; 
[shapeLayer setFillColor:[[UIColor blackColor] CGColor]]; 
// Set shape layer bounds and position 
// ... 

// Set the mask for the image view's layer 
[[imageView layer] setMask:shapeLayer]; 

請記住,實際上這並不是創建一個新圖像,因爲您參考的鏈接確實如此。這只是創建一個用於在圖像視圖頂部顯示的遮罩 - 這可能不是您想要的。

+0

謝謝馬特,正是我所尋找的,也提高了你的答案。 – 2009-12-03 22:12:20

5

我搜索了高低,終於找到了一個幾乎沒有任何限制的解決方案。所以,你在這裏:

UIImageView *maskeeImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MaskeeImage.png"]]; 

[maskeeImage setAnimationRepeatCount:-1]; 
[maskeeImage setAnimationImages:[[NSArray alloc] initWithObjects:[UIImage imageNamed:@"MaskeeImage1.png"], [UIImage imageNamed:@"MaskeeImage2.png"], [UIImage imageNamed:@"MaskeeImage3.png"], nil]]; 
[maskeeImage startAnimating]; 

CALayer *maskeeLayer = [maskeeImage layer]; 
maskeeLayer = CGRectMake(0, 0, 768, 1004); 
[[[self view] layer] addSublayer:maskeeLayer]; 

UIImage *maskImage = [UIImage imageNamed:@"ImageMask.png"]; 
CALayer *maskLayer = [CALayer layer]; 
maskLayer.contents = (id) myImageMask.CGImage; 
maskLayer.frame = CGRectMake(0, 0, 768, 1004); 
[maskeeLayer setMask:maskLayer]; 

你走了!一旦你知道如何,這其實很簡單。我試圖展示幾種不同的選擇;使用UIImageViews或UIImages,動畫(也可用於掩碼)。

綜上所述,你基本上必須在視圖的CALayer上設置mask屬性。每個UIView子類都附有一個CALayer,所以你根本不會受限於你從哪裏獲得你的面具或maskee。

希望這有助於。乾杯,迪倫。