OC-JigsawPuzzle

这个博客详细介绍了如何使用Objective-C编写一个简单的拼图游戏。作者首先设置了视图背景颜色,然后创建了一个原始图片视图。接着,通过循环将图片切割成9个小块,并分配到一个3x3的网格中。每个小块都是可交互的,当用户点击时,会触发交换位置的逻辑。最后,博客还包含了一个用于从原图中裁剪子图像的辅助方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//

//  ViewController.m

//  Games.JigsawPuzzle

//

//  Created by eric on 15-10-21.

//  Copyright (c) 2015 E_L. All rights reserved.

//


#import "ViewController.h"

#define WIDTH [UIScreen mainScreen].bounds.size.width

#define HEIGHT [UIScreen mainScreen].bounds.size.height

@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    self.view.backgroundColor=[UIColororangeColor];//color bkg

#pragma mark -imgV

    UIImageView* imgV=[[UIImageViewalloc]initWithImage:[UIImageimageNamed:@"girl.jpg"]];

    imgV.frame=CGRectMake((WIDTH-300)/2,HEIGHT-((HEIGHT-60)/4)-60,WIDTH/3,(HEIGHT-60)/3);

    [self.viewaddSubview:imgV];//show orginal img

#pragma mark -imgBkg

   UIImageView* imgBkg=[[UIImageViewalloc]initWithFrame:CGRectMake(65/2,60,310, 310)];

    imgBkg.backgroundColor=[UIColorpurpleColor];

    imgBkg.userInteractionEnabled=YES;

    [self.viewaddSubview:imgBkg];


#pragma mark -clipImg

   for (int i=0; i<3; i++) {

       for (int j=0; j<3; j++) {

           //clipImg

           UIImage* subImg=[selfclipImg:[UIImageimageNamed:@"girl.jpg"]withRect:CGRectMake(j*105, i*105,100, 100)];

            //gameV for loading clipped img

           UIImageView* gameV=[[UIImageViewalloc]initWithFrame:CGRectMake(j*105, i*105,100, 100)];

if (!(i==2&&j==2)) {

gameV.image=subImg;

}

            gameV.userInteractionEnabled=YES;

            UITapGestureRecognizer* tapGR=[[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(tapEvent:)];

            gameV.tag=10+10*i+j;

            [gameVaddGestureRecognizer:tapGR];

            [imgBkgaddSubview:gameV];

        }

    }

#pragma mark -


}

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

//    tap.view

UIImageView* imgBlank=(UIImageView*)[self.viewviewWithTag:32];

   UIImageView* imgV=(UIImageView*)[self.viewviewWithTag:tap.view.tag];


if(powf((imgV.center.x-imgBlank.center.x),2)==powf((imgBlank.frame.size.width+5),2)||powf((imgV.center.y-imgBlank.center.y),2)==powf((imgBlank.frame.size.height+5),2)){//get location info

if (imgV.center.x==imgBlank.center.x||imgV.center.y==imgBlank.center.y) {//get location info

CGPoint tempPoint;

tempPoint=imgBlank.center;

imgBlank.center=imgV.center;

imgV.center=tempPoint;//exchange position

}

}

// NSLog(@"%lu",imgV.tag);

//    NSLog(@"%f,%f",imgV.center.x,imgV.center.y);

}

-(UIImage*)clipImg:(UIImage*)img withRect:(CGRect)rect{


    CGImageRef imgRef=CGImageCreateWithImageInRect(img.CGImage, rect);

   UIImage* subImg=[UIImageimageWithCGImage:imgRef];

   return subImg;

}


-(void)viewDidAppear:(BOOL)animated{

    [superviewDidAppear:animated];


}

-(void)viewWillLayoutSubviews{


}

- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值