//加入购物车 步骤1
- (void)addToShopCar:(UIButton *)bt
{
//得到产品信息
UITableViewCell *cell = (UITableViewCell *)[bt superview];
NSIndexPath *indexPath = [mainTable indexPathForCell:cell];
NSDictionary *dic = [dataList objectAtIndex:indexPath.row];
addPrice = [[dic valueForKey:@"price"]intValue];
UIButton *shopCarBt = (UIButton*)[self.view viewWithTag:44];
//加入购物车动画效果
CALayer *transitionLayer = [[CALayer alloc] init];
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
transitionLayer.opacity = 1.0;
transitionLayer.contents = (id)bt.titleLabel.layer.contents;
transitionLayer.frame = [[UIApplication sharedApplication].keyWindow convertRect:bt.titleLabel.bounds fromView:bt.titleLabel];
[[UIApplication sharedApplication].keyWindow.layer addSublayer:transitionLayer];
[CATransaction commit];
//路径曲线
UIBezierPath *movePath = [UIBezierPath bezierPath];
[movePath moveToPoint:transitionLayer.position];
CGPoint toPoint = CGPointMake(shopCarBt.center.x, shopCarBt.center.y+60);
[movePath addQuadCurveToPoint:toPoint
controlPoint:CGPointMake(shopCarBt.center.x,transitionLayer.position.y-120)];
//关键帧
CAKeyframeAnimation *positionAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
positionAnimation.path = movePath.CGPath;
positionAnimation.removedOnCompletion = YES;
CAAnimationGroup *group = [CAAnimationGroup animation];
group.beginTime = CACurrentMediaTime();
group.duration = 0.7;
group.animations = [NSArray arrayWithObjects:positionAnimation,nil];
group.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
group.delegate = self;
group.fillMode = kCAFillModeForwards;
group.removedOnCompletion = NO;
group.autoreverses= NO;
[transitionLayer addAnimation:group forKey:@"opacity"];
[self performSelector:@selector(addShopFinished:) withObject:transitionLayer afterDelay:0.5f];
}
//加入购物车 步骤2
- (void)addShopFinished:(CALayer*)transitionLayer
{
[mainTable reloadData];
transitionLayer.opacity = 0;
UIButton *shopCarBt = (UIButton*)[self.view viewWithTag:55];
if (shopCarBt.hidden) {
NSString *str = [NSString stringWithFormat:@"¥%i",addPrice];
[shopCarBt setTitle:str forState:UIControlStateNormal];
[shopCarBt setHidden:NO];
} else{
allPrice = allPrice + addPrice;
NSString *str = [NSString stringWithFormat:@"¥%i",allPrice];
[shopCarBt setTitle:str forState:UIControlStateNormal];
//加入购物车动画效果
UILabel *addLabel = (UILabel*)[self.view viewWithTag:66];
[addLabel setText:[NSString stringWithFormat:@"+%i",addPrice]];
CALayer *transitionLayer1 = [[CALayer alloc] init];
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
transitionLayer1.opacity = 1.0;
transitionLayer1.contents = (id)addLabel.layer.contents;
transitionLayer1.frame = [[UIApplication sharedApplication].keyWindow convertRect:addLabel.bounds fromView:addLabel];
[[UIApplication sharedApplication].keyWindow.layer addSublayer:transitionLayer1];
[CATransaction commit];
CABasicAnimation *positionAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
positionAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(addLabel.frame.origin.x+30, addLabel.frame.origin.y+20)];
positionAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(addLabel.frame.origin.x+30, addLabel.frame.origin.y)];
CABasicAnimation *opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
opacityAnimation.fromValue = [NSNumber numberWithFloat:1.0];
opacityAnimation.toValue = [NSNumber numberWithFloat:0];
CABasicAnimation *rotateAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
rotateAnimation.fromValue = [NSNumber numberWithFloat:0 * M_PI];
rotateAnimation.toValue = [NSNumber numberWithFloat:2 * M_PI];
CAAnimationGroup *group = [CAAnimationGroup animation];
group.beginTime = CACurrentMediaTime();
group.duration = 0.3;
group.animations = [NSArray arrayWithObjects:positionAnimation,opacityAnimation,nil];
group.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
group.delegate = self;
group.fillMode = kCAFillModeForwards;
group.removedOnCompletion = NO;
group.autoreverses= NO;
[transitionLayer1 addAnimation:group forKey:@"opacity"];
}
}