简易拼图

//
//  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

posted @ 2016-07-26 17:43  代码始我快乐  阅读(297)  评论(0编辑  收藏  举报