// // RootViewController.m #import "RootViewController.h" @interface RootViewController () @end @implementation RootViewController //创建背景视图 -(void)createUIView { UIView * view = [[UIView alloc]initWithFrame:CGRectMake(9, 49, 302, 302)]; view.backgroundColor = [UIColor cyanColor]; view.tag = 100; [self.view addSubview:view]; } //创建提示视图 -(void)createUIImageView { UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 360, 100, 100)]; imageView.image = [UIImage imageNamed:@"king2.png"]; [self.view addSubview:imageView]; } //进行拼图 -(void)segmentImage { //<1>获取图片 UIImage * image =[UIImage imageNamed:@"king2.png"]; //<2>获取分割以后每一个小块的宽和高 float height = image.size.height / 4; float width = image.size.width / 4; //<3>获取到背景视图 UIView * backView = (UIView *)[self.view viewWithTag:100]; //<4> 创建16个UIImageView显示分割以后的小图片 for(int i = 0;i<4;i++) { for(int j = 0;j<4;j++) { UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(2 + width * j, 2 + height * i, width - 2, height -2)]; //imageView.backgroundColor = [UIColor orangeColor]; //<5>对图片进行分割 ---- 抠图 //图片分割类CGImageRef //CGImageRef这个类会根据提供的视图的大小进行等比例分割 //CGImageCreateWithImageInRect //第一个参数:被分割的图片的CGImage类型 //第二个参数:将图片按照什么尺寸划分 CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage, imageView.frame); //image.CGImage 这个方法是将UIImage转化成CGImage //<6>将CGImage类型的图片转化成UIImage类型的图片 UIImage * littleImage = [UIImage imageWithCGImage:imageRef]; //imageWithCGImage:这个方法是将CGImage转化成UIImage //<7>将16个image添加到16个UIImageView视图上 imageView.image = littleImage; //<8>隐藏一个小的子视图 if(i * j == 9) { imageView.tag = 998; [imageView setHidden:YES]; } //<9>为每一个小的子视图添加手势 imageView.userInteractionEnabled = YES; //调用自定义方法 [self addGestureRecgnizerOnImageView:imageView]; [backView addSubview:imageView]; } } } //为每一个视图添加手势的方法---自定义方法 -(void)addGestureRecgnizerOnImageView:(UIImageView *)imageView { UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)]; //设置点击次数 tap.numberOfTapsRequired = 1; //设置手指根数 tap.numberOfTouchesRequired = 1; //添加手势 [imageView addGestureRecognizer:tap]; } //实现点击方法 -(void)tapAction:(UITapGestureRecognizer *)tap { //<1>获取点击的子视图 UIImageView * tapImageView = (UIImageView *)tap.view; //<2>获取空的子视图 UIImageView * blockImageView = (UIImageView *)[self.view viewWithTag:998]; //<3>判断点击视图的横坐标和空视图的横坐标是否相差75 BOOL isEqualX75 = fabs(tapImageView.frame.origin.x - blockImageView.frame.origin.x) == 75; BOOL isEquelY75 = fabs(tapImageView.frame.origin.y - blockImageView.frame.origin.y) == 75; BOOL isEquelX0 = fabs(tapImageView.frame.origin.x - blockImageView.frame.origin.x) == 0; BOOL isEquelY0 = fabs(tapImageView.frame.origin.y - blockImageView.frame.origin.y) == 0; if((isEqualX75 && isEquelY0 )|| (isEquelX0 && isEquelY75)) { [UIView animateWithDuration:0.3 animations:^{ //可以交换点击的视图和空视图 CGRect tempView = tapImageView.frame; tapImageView.frame = blockImageView.frame; blockImageView.frame = tempView; } completion:nil]; } } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor purpleColor]; [self createUIView]; [self createUIImageView]; [self segmentImage]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end