私はiOSカメラアプリに取り組んでおり、デフォルトのカメラアプリが画像をキャプチャする際に行うものと同様のアニメーションを作成したいと考えています(シャッターアニメーションではありません)。キャプチャされた画像は、画面の左下隅にあるフォト ビューアーにドロップされるようです。これを達成する方法についてのアイデアはありますか?以前にView Controllerをアニメーション化しようとしたことがないので、その方法について少し迷っています。
* EDIT 実装の問題 * アニメーションのやり方を学びました。アニメーションはテスト イメージでうまく動作するように見えますが、AVCapture 接続から返された実際のイメージを使用すると、アニメーションがうまくいかなくなります。画像がゆがんで見え (縦横比に問題があります)、画像がたどるパスが実際のパスとは逆になっています。これは私がアニメーション化するために使用しているコードです:
- (void)animateImage:(UIImage*) image {
UIImageView *animator = [[UIImageView alloc]initWithImage:image];
animator.frame = previewView.frame;
animator.contentMode = UIViewContentModeScaleAspectFit;
[self.previewView addSubview:animator];
[CATransaction begin]; {
[CATransaction setCompletionBlock:^{
[animator removeFromSuperview];
}];
// Set up scaling
CABasicAnimation *resizeAnimation = [CABasicAnimation animationWithKeyPath:@"bounds"];
// Set to value to (0,0) rectangle
[resizeAnimation setToValue:[NSValue valueWithCGSize:CGSizeMake(0,0)]];
resizeAnimation.fillMode = kCAFillModeForwards;
resizeAnimation.removedOnCompletion = NO;
// Set up path movement
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
//Setting Endpoint of the animation
CGPoint endPoint = CGPointMake( animator.frame.size.width, animator.frame.size.height);
CGMutablePathRef curvedPath = CGPathCreateMutable();
CGPathMoveToPoint(curvedPath, NULL, 0, 0);
// CGPathMoveToPoint(curvedPath, NULL, animator.frame.size.width/2, animator.frame.size.height/2);
// CGPathAddCurveToPoint(curvedPath, NULL, 0,0,0,0, endPoint.x, endPoint.y);
CGPathAddLineToPoint(curvedPath, NULL, endPoint.x, endPoint.y);
pathAnimation.path = curvedPath;
CGPathRelease(curvedPath);
CAAnimationGroup *group = [CAAnimationGroup animation];
// group.fillMode = kCAFillModeForwards; // keep the final value after completion of animation
// group.removedOnCompletion = NO; // "
[group setAnimations:[NSArray arrayWithObjects: pathAnimation, resizeAnimation, nil]];
group.duration = 3.0f;
group.delegate = self;
[group setValue:animator forKey:@"imageViewBeingAnimated"];
[animator.layer addAnimation:group forKey:@"cameraAnimation"];
} [CATransaction commit];
}
横向きモードで写真を撮るとうまくいくようですが、縦向きモードではうまくいきません。それはオリエンテーションと関係がありますが、何が間違っているのかわかりません..
「previewView」フレームは、UIImage を追加し、拡大縮小して隅に移動する AVCapture プレビュー レイヤーです。
* 最終編集 * bounds.size の代わりに transform プロパティを使用して修正。ここの例に似ています : http://www.verious.com/article/animating-interfaces-with-core-animation-part-3/