我想在原生音乐应用程序iphone中做专辑和艺术家动画等动画

时间:2012-03-03 13:21:17

标签: iphone objective-c ios

如何在原生音乐应用中制作像专辑和艺术家这样的动画

1 个答案:

答案 0 :(得分:2)

我自己做了,这是代码

- (void)animateWithCurrentView:(UIView *)currentView {
    NSLog(@"center poin is %f %f",animationPoint.x,animationPoint.y);
//songsView.hidden = NO;
//[self.view bringSubviewToFront:songsView];

//flip the view by 180 degrees in its place first.
currentView.layer.transform = CATransform3DRotate(currentView.layer.transform,myRotationAngle(180), 0, 1, 0);

//set the anchor point so that the view rotates on one of its sides.
currentView.layer.anchorPoint = CGPointMake(0.5, 0.5);
/**
 * Set up scaling
 */
CABasicAnimation *resizeAnimation = [CABasicAnimation animationWithKeyPath:kResizeKey];

//we are going to fill the screen here. So 423,337
[resizeAnimation setToValue:[NSValue valueWithCGSize:CGSizeMake(423, 337)]];
resizeAnimation.fillMode            = kCAFillModeForwards;
resizeAnimation.removedOnCompletion = NO;


/**
 * Set up path movement
 */
UIBezierPath *movePath = [UIBezierPath bezierPath];

    //the control point is now set to centre of the filled screen. Change this to make the path different.
    // CGPoint ctlPoint       = CGPointMake(0.0, 0.5);
CGPoint ctlPoint       = CGPointMake(1024/2, 768/2);

//This is the starting point of the animation. This should ideally be a function of the frame of the view to be animated. Hardcoded here.

// Set here to get the accurate point..
[movePath moveToPoint:animationPoint];

//The anchor point is going to end up here at the end of the animation.
[movePath addQuadCurveToPoint:CGPointMake(1024/2, 768/2) controlPoint:ctlPoint];

CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:kPathMovement];

moveAnim.path                = movePath.CGPath;
moveAnim.removedOnCompletion = YES;

/**
 * Setup rotation animation
 */
CABasicAnimation* rotateAnimation = [CABasicAnimation animationWithKeyPath:kRotation];
//start from 180 degrees (done in 1st line)
CATransform3D fromTransform       = CATransform3DMakeRotation(myRotationAngle(180), 0, 1, 0);
//come back to 0 degrees
CATransform3D toTransform         = CATransform3DMakeRotation(myRotationAngle(0), 0, 1, 0);

//This is done to get some perspective.
CATransform3D persp1 = CATransform3DIdentity;
persp1.m34 = 1.0 / -3000;

fromTransform = CATransform3DConcat(fromTransform, persp1);
toTransform = CATransform3DConcat(toTransform,persp1);

rotateAnimation.toValue             = [NSValue valueWithCATransform3D:toTransform];
rotateAnimation.fromValue           = [NSValue valueWithCATransform3D:fromTransform];
//rotateAnimation.duration            = 2;
rotateAnimation.fillMode            = kCAFillModeForwards;
rotateAnimation.removedOnCompletion = NO;

/**
 * Setup and add all animations to the group
 */
CAAnimationGroup *group = [CAAnimationGroup animation]; 

[group setAnimations:[NSArray arrayWithObjects:moveAnim,rotateAnimation, resizeAnimation, nil]];

group.fillMode            = kCAFillModeForwards;
group.removedOnCompletion = NO;
group.duration            = 0.7f;
group.delegate            = self;

[group setValue:currentView forKey:kGroupAnimation];

/**
 * ...and go
 */
[currentView.layer addAnimation:group forKey:kLayerAnimation]; 
}