2013-06-26 77 views
2

我想要創建一個「創建視圖的副本,將此副本從一個點移動到另一個點,同時減少不透明度直到其完全消失」的動畫。複製圖層並將其移動

我想我需要做的是通過CABasicAnimation所以我嘗試類似的東西:

CGPoint point = CGPointMake(200, 0); 

    // copy layer 
    CALayer *layer = [[CALayer alloc] initWithLayer:self.animatedView.layer]; 
    [self.animatedView.layer addSublayer:layer]; 

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"]; 
    animation.fromValue = [layer valueForKey:@"position"]; 
    animation.toValue = [NSValue valueWithCGPoint:point]; 
    animation.duration = 2.0f; 

    CABasicAnimation *oanimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
    oanimation.fromValue = @1; 
    oanimation.toValue = @0; 
    oanimation.duration = 1.0f; 

    // move copy layer 
    [layer addAnimation:animation forKey:@"position"]; 
    [layer addAnimation:oanimation forKey:@"opacity"]; 

但是沒有什麼追加,我認爲這是有關的文檔正常情況:

這初始化用於爲presentationLayer方法創建圖層的陰影副本,例如 示例。在任何 其他情況下使用此方法都會產生未定義的行爲。例如,不要 使用此方法用現有圖層的 內容初始化新圖層。

有人已經做過這種動畫了嗎?

Thx尋求幫助。

+0

爲什麼打副本?爲什麼一層?爲什麼不移動和淡入原始視圖? – Wain

+0

因爲這不是我想要做的。我正在從左側控制器複製一個視圖到右側控制器(分割屏幕),所以我想要一個從左到右假動作的效果,同時保留在左側控制器 – Yaman

+1

好吧,所以你想複製,但你仍然可以做到這一點在視圖層面。 'UIView'符合'NSCoding',所以你可以複製它。 – Wain

回答

0
UIGraphicsBeginImageContext(theView.frame.size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[theView.layer renderInContext:context]; 
UIImage *screenShot = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

UIImageView *imgView = [[UIImageView alloc] initWithImage:screenShot]; 
imgView.frame = theView.frame; 
[self.view addSubview:imgView]; 

然後用 'imgView' :)