我製作了一堆個別的小圖片,每張圖片都有一個單獨的CALayer,並且它們應該以不同的速率異步地淡入和淡出。每個都有一個背景子圖層和一個填充子圖層。計時器在後臺運行,在特定時刻單獨爲每個人設置動畫。對於該程序的當前行爲,而不是爲每個單獨的動畫製作動畫,而是圍繞它動畫化整個屏幕。你能幫我做到這一點嗎?它一次只能激活一個圖像?CABasicAnimation在應該只動畫一件東西的時候動畫所有東西
編輯:我應該更清楚。時機不是問題。在我切換到CoreAnimation之前,這些圖像在適當的時候正確地動畫。但是,這裏的主要問題是,當我告訴一個圖像進行動畫製作時,整個屏幕(包括所有圖像之外的屏幕的背景部分)都會生成動畫。
以下代碼段用於在UIView代碼中創建分層結構。 Self指的是主要的UIView。返回值用於爲代表屏幕上這些小圖像之一的類設置CALayer成員變量。
- (CALayer *) createImageLayer:(CGPoint)orig Center:(CGPoint)pos {
CALayer *parentLayer = [self layer];
CALayer *childLayer1 = [CALayer layer];
childLayer1.bounds = CGRectMake(0, 0, 40.0f, 40.0f);
childLayer1.position = pos;
CALayer *childLayer2 = [CALayer layer];
childLayer2.bounds = CGRectMake(0, 0, 40.0f, 40.0f);
childLayer2.position = pos;
float components[4] = {1.0, 1.0, 1.0, 1.0};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGColorRef whiteColor = CGColorCreate(colorSpace, components);
childLayer1.backgroundColor = whiteColor;
childLayer2.backgroundColor = whiteColor;
UIImage *childImage = [UIImage imageNamed:@"back.png"];
UIImage *childImage2 = [UIImage imageNamed:@"fill.png"];
CGImageRef imageRef = [childImage CGImage];
CGImageRef imageRef2 = [childImage2 CGImage];
childLayer1.contents=(id)imageRef;
childLayer2.contents=(id)imageRef2;
[parentLayer addSublayer:childLayer1];
[parentLayer addSublayer:childLayer2];
CGColorSpaceRelease(colorSpace);
CGColorRelease(whiteColor);
return parentLayer;
}
告訴它動畫的代碼。圖像對象被告知將動畫添加到其圖層成員。
- (void) fadeAnimation:(ImageClass *)image {
CABasicAnimation *theAnimation;
theAnimation=[CABasicAnimation animationWithKeyPath:@"opacity"];
theAnimation.duration=1.0; // fixed duration for now
theAnimation.repeatCount=1;
theAnimation.autoreverses=YES;
theAnimation.fromValue=[NSNumber numberWithFloat:1.0];
theAnimation.toValue=[NSNumber numberWithFloat:0.0];
[image.myLayer addAnimation:theAnimation forKey:@"animateOpacity"];
}
謝謝你的幫助。我得到的主要問題是,當我想要告訴每個單獨的圖像執行淡入淡出動畫時,例如[self fadeAnimation:myImage],它會將動畫顯示在整個屏幕上,而不會顯示在圖像上。時機對我來說並不是真正的問題,但我可以嘗試一下你的建議,因爲這對我的目的而言似乎比計時器更適合。 – William 2010-06-22 20:43:14