2012-04-26 52 views
5

由於某些原因,我試圖避免使用CAScrollLayer來做到這一點。我所追求的效果是逐步揭示(從底部到頂部)一個CALayer的內容(我之前加載過的一個PNG)。所以我想這樣做:我怎樣才能讓CAlayer的邊界動畫逐步顯示圖像?

layer.anchorPoint = CGPointMake(.5, 1); 
    CABasicAnimation* a = [CABasicAnimation animationWithKeyPath:@"bounds.size.height"]; 
    a.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    a.fillMode = kCAFillModeBoth; 
    a.removedOnCompletion = NO; 
    a.duration = 1; 
    a.fromValue = [NSNumber numberWithFloat:0.]; 
    a.toValue = [NSNumber numberWithFloat:layer.bounds.size.height]; 
    [layer addAnimation:a forKey:nil]; 

這個問題是你可以告訴圖層的內容與邊界縮放。我試圖改變邊界,但內容始終保持原始大小,以便邊界能夠有效地剪切圖像,並隨着邊界的增加而變高。圖像「顯示」本身。

任何想法如何將其關閉或我可能會丟失什麼?

回答

3

好,我得到它的工作,但我基本上太更新層的框架,以反映錨點的變化:

[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 
    layer.contentsGravity = kCAGravityTop; 
    layer.masksToBounds = YES; 
    layer.anchorPoint = CGPointMake(.5, 1); 
    CGRect newFrame = layer.frame; 
    newFrame.origin.y += newFrame.size.height/2; 
    layer.frame = newFrame; 
    [CATransaction setValue:(id)kCFBooleanFalse forKey:kCATransactionDisableActions]; 

    a.toValue = [NSNumber numberWithFloat:layer.bounds.size.height]; 
    [layer addAnimation:a forKey:nil]; 
0

您可以在目標圖像上放置另一個圖像並將其像舞臺幕一樣移動。

+0

我知道,但因爲在一個以上的效率水平(可以有這些影響中的一小部分會立即發生,我需要自己處理CALayers)我決定不這樣做。現在我正在試驗contentRect,並且我能夠把它弄到幾乎正確。唯一的問題是內容rect動畫時,我也得到了一種在圖層內繪製的筆畫軌跡。 – SaldaVonSchwartz 2012-04-26 19:21:08

+0

contentRect的文檔說「如果請求單位矩形外的像素,內容圖像的邊緣像素將向外擴展」所以我想這就是爲什麼我得到筆畫效果 – SaldaVonSchwartz 2012-04-26 19:30:29

2

如果您更改了剪貼蒙版呢? (或使用遮罩層)。

3

「爸爸」有正確的答案。

您想創建一個CAShapeLayer,並將其作爲蒙版安裝在您的圖層上。

創建一個只是矩形的CGPath並將該路徑安裝到形狀圖層中。路徑的內容決定了蒙版圖層的哪些區域出現。如果路徑是圖層中間的三角形,則只會出現三角形。

然後,您創建一個動畫動畫路徑。

要從底部顯示圖像,您需要在圖層底部設置一個0高度矩形的路徑,然後創建一個CAAnimation,其中的toValue是具有高度的同一個矩形你想透露的全層圖層。該系統會生成一個動畫,在掃描中顯示圖像。

您可以使用同樣的技術來實現各種很酷的效果,像穀倉門,百葉窗,「虹膜溼巾」等

+0

感謝您的詳細描述 – 2015-09-10 09:26:34

相關問題