拼图游戏

//给出一张图片,然后将该图片的每块指定位置分割出来,放进数组中,然后循环摆放。点击的时候判断是否移动,简单的拼图游戏即成。

#define VIEW_WIDTH self.view.frame.size.width

#define VIEW_HEIGHT self.view.frame.size.height


@interface ViewController (){

    UIImageView *_spaceImageView;

    UIImage *_image;

}


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    //创建完整图片

    [selfcreateSmallImageView];

    //创建拼图图片

    [selfcreatePuzzle];

}


- (void)createPuzzle{

    UIImage *image = [UIImageimageNamed:@"beautifulGirl"];

    CGSize imageSize = image.size;

    //改变难易程度的关键

    NSInteger cube =4;

    CGFloat width = imageSize.width / cube;

    NSMutableArray *imageList = [[NSMutableArrayalloc]init];

    //循环创建 4 4正方形

    for (int i =0; i < cube * cube; i++) {

        //

        int row = i / cube;

        //

        int column = i % cube;

        CGRect rect =CGRectMake(column * width, row * width, width, width);

        //获取制定位置的切图

        UIImage *subImage = [selfclipImage:image withRect:rect];

        [imageList addObject:subImage];

    }


    for (int i =0; i < cube * cube; i++) {

       int row = i / cube;

       int column = i % cube;

     UIImageView *subImageView = [[UIImageViewalloc]initWithFrame:CGRectMake((VIEW_WIDTH - imageSize.width) / 2 + column * width, 50 + row * width , width, width)];

        //取图片数组中的逆序,从而造成图片的乱序

        subImageView.image = imageList[cube * cube -1 - i];

        //允许用户交互

        subImageView.userInteractionEnabled =YES;

        //将最后一个清空,记录空白图片视图的坐标

        if (i ==0) {

            subImageView.image =nil;

            _spaceImageView = subImageView;

        }

        //做出来分割线

        subImageView.layer.borderColor = [UIColorgrayColor].CGColor;

        subImageView.layer.borderWidth =1;

//添加点击手势

        UITapGestureRecognizer *tap = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(tapHandle:)];

        [subImageView addGestureRecognizer:tap];

        [self.viewaddSubview:subImageView];

    }

}


- (void)tapHandle:(UITapGestureRecognizer *)tap{

    if (tap.view !=_spaceImageView) {

        CGFloat tapX = tap.view.frame.origin.x;

        CGFloat tapY = tap.view.frame.origin.y;

        CGFloat spaceX =_spaceImageView.frame.origin.x;

        CGFloat spaceY =_spaceImageView.frame.origin.y;

        //判断是否和空白图片视图交换

        if (fabs(spaceX - tapX ) +fabs(spaceY - tapY) == _spaceImageView.frame.size.width) {

            CGRect frame = tap.view.frame;

            tap.view.frame =_spaceImageView.frame;

            _spaceImageView.frame = frame;

        }

    }

}

//下方显示完整的图片

- (void)createSmallImageView{

    UIImageView *downImageView = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:@"beautifulGirl"]];

    downImageView.frame =CGRectMake((VIEW_WIDTH -100) / 3,VIEW_HEIGHT - 200,200, 200);

    [self.viewaddSubview:downImageView];

}


//给一个图片对象,给一个需要切割的大小,将图片切割成为指定大小的小图片

- (UIImage *)clipImage:(UIImage *)image withRect:(CGRect )rect{

    CGImageRef CGImage =CGImageCreateWithImageInRect(image.CGImage, rect);

    return [UIImageimageWithCGImage:CGImage];

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值