// // ViewController.m // 翻页测试 // // Created by nyhx on 16/6/29. // Copyright © 2016年 nyhx. All rights reserved. // #import "ViewController.h" #define RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / M_PI)) #define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI) @interface ViewController () { BOOL isAllowButRig; BOOL isAllowTopRig; BOOL isAllowButLef; BOOL isAllowTopLef; BOOL isAllowLef; BOOL isAllowRig; BOOL isAllowTop; BOOL isAllowBut; } @property (weak, nonatomic) IBOutlet UIView *backView; @property (weak, nonatomic) IBOutlet UIImageView *PukeImageView; @property (nonatomic,strong) UIImageView * ZImageView; @property (nonatomic,strong) CAShapeLayer * shapeLayer; @property (nonatomic,strong) CAShapeLayer * BackShapeLayer; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _PukeImageView.image=[UIImage imageNamed:@"back.jpg"]; _ZImageView=[[UIImageView alloc]initWithFrame:_PukeImageView.frame]; _ZImageView.image=[UIImage imageNamed:@"7.jpg"]; [self.backView addSubview:_ZImageView]; //create shape layer _shapeLayer =[CAShapeLayer layer]; _shapeLayer.strokeColor =[UIColor clearColor].CGColor; _shapeLayer.fillColor = [UIColor blueColor].CGColor; _shapeLayer.lineWidth = 1; _shapeLayer.lineJoin = kCALineJoinRound; _shapeLayer.lineCap = kCALineCapRound; _ZImageView.layer.mask=_shapeLayer; //create shape layer _BackShapeLayer =[CAShapeLayer layer]; _BackShapeLayer.strokeColor =[UIColor clearColor].CGColor; _BackShapeLayer.fillColor = [UIColor blueColor].CGColor; _BackShapeLayer.lineWidth = 1; _BackShapeLayer.lineJoin = kCALineJoinRound; _BackShapeLayer.lineCap = kCALineCapRound; _PukeImageView.layer.mask=_BackShapeLayer; //path2 CGPoint point11=CGPointMake(0, 0); CGPoint point22=CGPointMake(_PukeImageView.frame.size.width, 0); CGPoint point33=CGPointMake(_PukeImageView.frame.size.width, _PukeImageView.frame.size.height); CGPoint point44=CGPointMake(0, _PukeImageView.frame.size.height); UIBezierPath *path2 = [[UIBezierPath alloc] init]; [path2 moveToPoint:point11]; [path2 addLineToPoint:point22]; [path2 addLineToPoint:point33]; [path2 addLineToPoint:point44]; [path2 addLineToPoint:point11]; _BackShapeLayer.path = path2.CGPath; } -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { isAllowButRig=NO; isAllowTopRig=NO; isAllowButLef=NO; isAllowTopLef=NO; isAllowLef=NO; isAllowRig=NO; isAllowTop=NO; isAllowBut=NO; CGPoint point=[[touches anyObject] locationInView:self.PukeImageView]; if (point.x>=0&&point.x<self.PukeImageView.frame.size.width/3.0&&point.y>=0&&point.y<self.PukeImageView.frame.size.height/3.0) {//左上角 isAllowTopLef=YES; } if (point.x>=self.PukeImageView.frame.size.width/3.0&&point.x<self.PukeImageView.frame.size.width/3.0*2.0&&point.y>=0&&point.y<self.PukeImageView.frame.size.height/3.0) {//上 isAllowTop=YES; } if (point.x>=self.PukeImageView.frame.size.width/3.0*2.0&&point.x<self.PukeImageView.frame.size.width&&point.y>=0&&point.y<self.PukeImageView.frame.size.height/3.0) {//右上角 isAllowTopRig=YES; } if (point.x>=0&&point.x<self.PukeImageView.frame.size.width/3.0&&point.y>=self.PukeImageView.frame.size.height/3.0&&point.y<self.PukeImageView.frame.size.height/3.0*2.0) {//左 isAllowLef=YES; } if (point.x>=self.PukeImageView.frame.size.width/3.0*2.0&&point.x<self.PukeImageView.frame.size.width&&point.y>=self.PukeImageView.frame.size.height/3.0&&point.y<self.PukeImageView.frame.size.height/3.0*2.0) {//右 isAllowRig=YES; } if (point.x>=0&&point.x<self.PukeImageView.frame.size.width/3.0&&point.y>=self.PukeImageView.frame.size.height/3.0*2.0&&point.y<self.PukeImageView.frame.size.height) {//左下角 isAllowButLef=YES; } if (point.x>=self.PukeImageView.frame.size.width/3.0&&point.x<self.PukeImageView.frame.size.width/3.0*2.0&&point.y>=self.PukeImageView.frame.size.height/3.0*2.0&&point.y<self.PukeImageView.frame.size.height) {//下 isAllowBut=YES; } if (point.x>=self.PukeImageView.frame.size.width/3.0*2.0&&point.x<self.PukeImageView.frame.size.width&&point.y>=self.PukeImageView.frame.size.height/3.0*2.0&&point.y<self.PukeImageView.frame.size.height) {//右下角 isAllowButRig=YES; } } -(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { if (isAllowButRig) { _ZImageView.layer.anchorPoint=CGPointMake(0, 1); CGPoint point=[[touches anyObject] locationInView:self.backView]; [self MoveButRigWithPoint:point]; } if (isAllowTopRig) { _ZImageView.layer.anchorPoint=CGPointMake(0, 0); CGPoint point=[[touches anyObject] locationInView:self.backView]; [self MoveTopRigWithPoint:point]; } if (isAllowButLef) { _ZImageView.layer.anchorPoint=CGPointMake(1, 1); CGPoint point=[[touches anyObject] locationInView:self.backView]; [self MoveButLefWithPoint:point]; } if (isAllowTopLef) { _ZImageView.layer.anchorPoint=CGPointMake(1, 0); CGPoint point=[[touches anyObject] locationInView:self.backView]; [self MoveTopLefWithPoint:point]; } if (isAllowLef) { _ZImageView.layer.anchorPoint=CGPointMake(1, 0.5); CGPoint point=[[touches anyObject] locationInView:self.backView]; [self MoveLefWithPoint:point]; } if (isAllowRig) { _ZImageView.layer.anchorPoint=CGPointMake(0, 0.5); CGPoint point=[[touches anyObject] locationInView:self.backView]; [self MoveRigWithPoint:point]; } if (isAllowTop) { _ZImageView.layer.anchorPoint=CGPointMake(0.5, 1); CGPoint point=[[touches anyObject] locationInView:self.backView]; [self MoveTopWithPoint:point]; } if (isAllowBut) { _ZImageView.layer.anchorPoint=CGPointMake(0.5, 0); CGPoint point=[[touches anyObject] locationInView:self.backView]; [self MoveButWithPoint:point]; } } -(void)MoveLefWithPoint:(CGPoint)point { float K=point.x-_PukeImageView.frame.origin.x; if (K<=0) { return; } _ZImageView.layer.position=CGPointMake(_PukeImageView.frame.origin.x+K, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height/2); CGPoint rigPoint2=CGPointMake(_PukeImageView.frame.origin.x+K/2.0, _PukeImageView.frame.origin.y); CGPoint rigPoint3=CGPointMake(_PukeImageView.frame.origin.x+K, _PukeImageView.frame.origin.y); CGPoint rigPoint4=CGPointMake(_PukeImageView.frame.origin.x+K, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height); CGPoint rigPoint5=CGPointMake(_PukeImageView.frame.origin.x+K/2.0, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height); //path1 [self changeShapeLayerPathWithLayer:_shapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint2],[NSValue valueWithCGPoint:rigPoint3],[NSValue valueWithCGPoint:rigPoint4],[NSValue valueWithCGPoint:rigPoint5]] andConvertView:_ZImageView]; //path2 CGPoint rigPoint11=rigPoint3; CGPoint rigPoint22=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y); CGPoint rigPoint33=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height); CGPoint rigPoint44=rigPoint4; [self changeShapeLayerPathWithLayer:_BackShapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint22],[NSValue valueWithCGPoint:rigPoint33],[NSValue valueWithCGPoint:rigPoint44],[NSValue valueWithCGPoint:rigPoint11]] andConvertView:_PukeImageView]; } -(void)MoveRigWithPoint:(CGPoint)point { float K=_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width-point.x; if (K<=0) { return; } _ZImageView.layer.position=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width-K, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height/2.0); CGPoint rigPoint2=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width-K/2.0, _PukeImageView.frame.origin.y); CGPoint rigPoint3=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width-K, _PukeImageView.frame.origin.y); CGPoint rigPoint4=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width-K, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height); CGPoint rigPoint5=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width-K/2.0, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height); //path1 [self changeShapeLayerPathWithLayer:_shapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint2],[NSValue valueWithCGPoint:rigPoint3],[NSValue valueWithCGPoint:rigPoint4],[NSValue valueWithCGPoint:rigPoint5]] andConvertView:_ZImageView]; //path2 CGPoint rigPoint11=rigPoint3; CGPoint rigPoint22=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y); CGPoint rigPoint33=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height); CGPoint rigPoint44=rigPoint4; [self changeShapeLayerPathWithLayer:_BackShapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint22],[NSValue valueWithCGPoint:rigPoint33],[NSValue valueWithCGPoint:rigPoint44],[NSValue valueWithCGPoint:rigPoint11]] andConvertView:_PukeImageView]; } -(void)MoveTopWithPoint:(CGPoint)point { float K=point.y-_PukeImageView.frame.origin.y; if (K<=0) { return; } _ZImageView.layer.position=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width/2.0, _PukeImageView.frame.origin.y+K); CGPoint rigPoint2=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y+K/2.0); CGPoint rigPoint3=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y+K); CGPoint rigPoint4=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y+K); CGPoint rigPoint5=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y+K/2.0); //path1 [self changeShapeLayerPathWithLayer:_shapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint2],[NSValue valueWithCGPoint:rigPoint3],[NSValue valueWithCGPoint:rigPoint4],[NSValue valueWithCGPoint:rigPoint5]] andConvertView:_ZImageView]; //path2 CGPoint rigPoint11=rigPoint3; CGPoint rigPoint22=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height); CGPoint rigPoint33=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height); CGPoint rigPoint44=rigPoint4; [self changeShapeLayerPathWithLayer:_BackShapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint22],[NSValue valueWithCGPoint:rigPoint33],[NSValue valueWithCGPoint:rigPoint44],[NSValue valueWithCGPoint:rigPoint11]] andConvertView:_PukeImageView]; } -(void)MoveButWithPoint:(CGPoint)point { float K=_PukeImageView.frame.origin.y+_PukeImageView.frame.size.height-point.y; if (K<=0) { return; } _ZImageView.layer.position=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width/2.0, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height-K); CGPoint rigPoint2=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height-K/2.0); CGPoint rigPoint3=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height-K); CGPoint rigPoint4=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height-K); CGPoint rigPoint5=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height-K/2.0); //path1 [self changeShapeLayerPathWithLayer:_shapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint2],[NSValue valueWithCGPoint:rigPoint3],[NSValue valueWithCGPoint:rigPoint4],[NSValue valueWithCGPoint:rigPoint5]] andConvertView:_ZImageView]; //path2 CGPoint rigPoint11=rigPoint3; CGPoint rigPoint22=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y); CGPoint rigPoint33=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y); CGPoint rigPoint44=rigPoint4; [self changeShapeLayerPathWithLayer:_BackShapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint22],[NSValue valueWithCGPoint:rigPoint33],[NSValue valueWithCGPoint:rigPoint44],[NSValue valueWithCGPoint:rigPoint11]] andConvertView:_PukeImageView]; } #pragma ---角 -(void)MoveTopLefWithPoint:(CGPoint)point { float K=point.x-_PukeImageView.frame.origin.x; float L=point.y-_PukeImageView.frame.origin.y; if (K<=0||L<=0) { return; } float bianX=(K*K+L*L)/(2*K); float HuduCos1=(K-bianX)/bianX;//角1cos弧度 CGPoint rigPoint2=CGPointZero; CGPoint rigPoint3=CGPointZero; if (RADIANS_TO_DEGREES(acosf(HuduCos1))<90.0) {//情况1 float bianY=K/L*bianX; _ZImageView.layer.position=point; _ZImageView.layer.transform=CATransform3DMakeRotation(acosf(HuduCos1), 0, 0, 1);//正面旋转 rigPoint2=CGPointMake(_PukeImageView.frame.origin.x+bianX, _PukeImageView.frame.origin.y) ; rigPoint3=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y+bianY); } else{//情况2 float bianY=(K*K+L*L)/(2*L); bianX=L/K*bianY; _ZImageView.layer.position=point; _ZImageView.layer.transform=CATransform3DMakeRotation(acosf(HuduCos1), 0, 0, 1);//正面旋转 rigPoint2=CGPointMake(_PukeImageView.frame.origin.x+bianX, _PukeImageView.frame.origin.y) ; rigPoint3=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y+bianY); } //path1 [self changeShapeLayerPathWithLayer:_shapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint2],[NSValue valueWithCGPoint:rigPoint3],[NSValue valueWithCGPoint:point]] andConvertView:_ZImageView]; //path2 CGPoint rigPoint11=rigPoint2; CGPoint rigPoint22=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y); CGPoint rigPoint33=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height); CGPoint rigPoint44=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height); CGPoint rigPoint55=rigPoint3; [self changeShapeLayerPathWithLayer:_BackShapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint22],[NSValue valueWithCGPoint:rigPoint33],[NSValue valueWithCGPoint:rigPoint44],[NSValue valueWithCGPoint:rigPoint55],[NSValue valueWithCGPoint:rigPoint11]] andConvertView:_PukeImageView]; } -(void)MoveButLefWithPoint:(CGPoint)point { float K=point.x-_PukeImageView.frame.origin.x; float L=_PukeImageView.frame.origin.y+_PukeImageView.frame.size.height-point.y; if (K<=0||L<=0) { return; } float bianX=(K*K+L*L)/(2*K); float HuduCos1=(K-bianX)/bianX;//角1cos弧度 CGPoint rigPoint2=CGPointZero; CGPoint rigPoint3=CGPointZero; if (RADIANS_TO_DEGREES(acosf(HuduCos1))<90.0) {//情况1 float bianY=K/L*bianX; _ZImageView.layer.position=point; _ZImageView.layer.transform=CATransform3DMakeRotation(acosf(HuduCos1), 0, 0, -1);//正面旋转 rigPoint2=CGPointMake(_PukeImageView.frame.origin.x+bianX, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height) ; rigPoint3=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height-bianY); } else{//情况2 float bianY=(K*K+L*L)/(2*L); bianX=L/K*bianY; _ZImageView.layer.position=point; _ZImageView.layer.transform=CATransform3DMakeRotation(DEGREES_TO_RADIANS(180.0-RADIANS_TO_DEGREES(asinf(K/bianY))), 0, 0, -1);//正面旋转 rigPoint2=CGPointMake(_PukeImageView.frame.origin.x+bianX, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height) ; rigPoint3=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height-bianY); } //path1 [self changeShapeLayerPathWithLayer:_shapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint2],[NSValue valueWithCGPoint:rigPoint3],[NSValue valueWithCGPoint:point]] andConvertView:_ZImageView]; //path2 CGPoint rigPoint11=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y); CGPoint rigPoint22=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y); CGPoint rigPoint33=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height); CGPoint rigPoint44=rigPoint2; CGPoint rigPoint55=rigPoint3; [self changeShapeLayerPathWithLayer:_BackShapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint22],[NSValue valueWithCGPoint:rigPoint33],[NSValue valueWithCGPoint:rigPoint44],[NSValue valueWithCGPoint:rigPoint55],[NSValue valueWithCGPoint:rigPoint11]] andConvertView:_PukeImageView]; } -(void)MoveTopRigWithPoint:(CGPoint)point { float K=_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width-point.x; float L=point.y-_PukeImageView.frame.origin.y; if (K<=0||L<=0) { return; } float bianX=(K*K+L*L)/(2*K); float HuduCos1=(K-bianX)/bianX;//角1cos弧度 CGPoint rigPoint2=CGPointZero; CGPoint rigPoint3=CGPointZero; if (RADIANS_TO_DEGREES(acosf(HuduCos1))<90.0) {//情况1 float bianY=K/L*bianX; _ZImageView.layer.position=point; _ZImageView.layer.transform=CATransform3DMakeRotation(acosf(HuduCos1), 0, 0, -1);//正面旋转 rigPoint2=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width-bianX, _PukeImageView.frame.origin.y) ; rigPoint3=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y+bianY); } else{//情况2 float bianY=(K*K+L*L)/(2*L); bianX=L/K*bianY; _ZImageView.layer.position=point; _ZImageView.layer.transform=CATransform3DMakeRotation(acosf(HuduCos1), 0, 0, -1);//正面旋转 rigPoint2=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width-bianX, _PukeImageView.frame.origin.y) ; rigPoint3=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y+bianY); } //path1 [self changeShapeLayerPathWithLayer:_shapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint2],[NSValue valueWithCGPoint:rigPoint3],[NSValue valueWithCGPoint:point]] andConvertView:_ZImageView]; //path2 CGPoint rigPoint11=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y); CGPoint rigPoint22=rigPoint2; CGPoint rigPoint33=rigPoint3; CGPoint rigPoint44=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height); CGPoint rigPoint55=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height); [self changeShapeLayerPathWithLayer:_BackShapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint22],[NSValue valueWithCGPoint:rigPoint33],[NSValue valueWithCGPoint:rigPoint44],[NSValue valueWithCGPoint:rigPoint55],[NSValue valueWithCGPoint:rigPoint11]] andConvertView:_PukeImageView]; } -(void)MoveButRigWithPoint:(CGPoint)point { float K=_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width-point.x; float L=_PukeImageView.frame.origin.y+_PukeImageView.frame.size.height-point.y; if (K<=0||L<=0) { return; } float bianX=(K*K+L*L)/(2*K); float HuduCos1=(K-bianX)/bianX;//角1cos弧度 CGPoint rigPoint2=CGPointZero; CGPoint rigPoint3=CGPointZero; if (RADIANS_TO_DEGREES(acosf(HuduCos1))<90.0) {//情况1 float bianY=K/L*bianX; _ZImageView.layer.position=point; _ZImageView.layer.transform=CATransform3DMakeRotation(acosf(HuduCos1), 0, 0, 1);//正面旋转 rigPoint2=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width-bianX, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height) ; rigPoint3=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height-bianY); } else{//情况2 float bianY=(K*K+L*L)/(2*L); bianX=L/K*bianY; _ZImageView.layer.position=point; _ZImageView.layer.transform=CATransform3DMakeRotation(DEGREES_TO_RADIANS(180.0-RADIANS_TO_DEGREES(asinf(K/bianY))), 0, 0, 1);//正面旋转 rigPoint2=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width-bianX, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height) ; rigPoint3=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height-bianY); } //path1 [self changeShapeLayerPathWithLayer:_shapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint2],[NSValue valueWithCGPoint:rigPoint3],[NSValue valueWithCGPoint:point]] andConvertView:_ZImageView]; //path2 CGPoint rigPoint11=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y); CGPoint rigPoint22=CGPointMake(_PukeImageView.frame.origin.x+_PukeImageView.frame.size.width, _PukeImageView.frame.origin.y); CGPoint rigPoint33=rigPoint3; CGPoint rigPoint44=rigPoint2; CGPoint rigPoint55=CGPointMake(_PukeImageView.frame.origin.x, _PukeImageView.frame.origin.y+_PukeImageView.frame.size.height); [self changeShapeLayerPathWithLayer:_BackShapeLayer andArr:@[[NSValue valueWithCGPoint:rigPoint22],[NSValue valueWithCGPoint:rigPoint33],[NSValue valueWithCGPoint:rigPoint44],[NSValue valueWithCGPoint:rigPoint55],[NSValue valueWithCGPoint:rigPoint11]] andConvertView:_PukeImageView]; } -(void)changeShapeLayerPathWithLayer:(CAShapeLayer *)layer andArr:(NSArray *)arr andConvertView:(UIImageView *)convertView { NSValue * lastValue=[arr lastObject]; UIBezierPath *path = [[UIBezierPath alloc] init]; [path moveToPoint:[self.backView convertPoint:[lastValue CGPointValue] toView:convertView]]; for (NSValue * value in arr) { CGPoint point=[self.backView convertPoint:[value CGPointValue] toView:convertView]; [path addLineToPoint:point]; } layer.path=path.CGPath; } -(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { NSLog(@"111"); } @end