#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (UIImage *)clipImage:(UIImage *)image inRect:(CGRect)rect

{//返回image中rect范围内的图片

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

UIImage *subImage = [UIImage imageWithCGImage:imageRef];

return subImage;

}

- (void)viewDidLoad

{

[super viewDidLoad];

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

self.view.backgroundColor =[UIColor cyanColor];

UIImageView *iv=[[UIImageView alloc]initWithFrame:CGRectMake(8, self.view.bounds.size.height-180, 150, 150)];

[iv setImage:[UIImage imageNamed:@"king2"]];

[self.view addSubview:iv];

UIButton *btn=[UIButton buttonWithType:UIButtonTypeSystem];

btn.frame=CGRectMake(200, 400, 100, 50);

[btn setTitle:@"恢复" forState:UIControlStateNormal];

btn.backgroundColor=[UIColor orangeColor];

[self.view addSubview:btn];

[btn addTarget:self action:@selector(nc) forControlEvents:UIControlEventTouchUpInside];

[self addpic];

}

-(void)nc

{

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

UIImageView *iv=(UIImageView *)[self.view viewWithTag:100+i];

[UIImageView animateWithDuration:1 animations:^{

iv.frame=CGRectMake((i%3)*102+2, (i/3)*102+2, 100, 100);

}];

}

}

-(void)addpic

{

UIView *view=[[UIView alloc]initWithFrame:CGRectMake(6, 60, 308, 308)];

view.backgroundColor=[UIColor orangeColor];

[self.view addSubview:view];

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

UIImageView *a=[[UIImageView alloc]initWithFrame:CGRectMake((i%3)*102+2, (i/3)*102+2, 100, 100)];

a.image=[self clipImage:[UIImage imageNamed:@"king4"] inRect:CGRectMake((i%3)*100, (i/3)*100, 100, 100)];

[view addSubview:a];

}

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

UIImageView *qview=[[UIImageView alloc]initWithFrame:CGRectMake((i%3)*102+2, (i/3)*102+2, 100, 100)];

qview.image=[self clipImage:[UIImage imageNamed:@"king2"] inRect:CGRectMake((i%3)*100, (i/3)*100, 100, 100)];

qview.userInteractionEnabled=YES;

qview.tag=100+i;

if (i==8) {

qview.image =  [UIImage imageNamed:@"king3"];

}

[view addSubview:qview];

}

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

//获取触摸视图

UITouch *touch =[touches anyObject];

//NSLog(@"22222");

if ([touch.view isKindOfClass:[UIImageView class]]) {

UIImageView *kong = (UIImageView *)[self.view viewWithTag:108];

//NSLog(@"%@",NSStringFromCGPoint(kong));

CGPoint temp = touch.view.center;

if (kong.center.y == touch.view.center.y) {

if (kong.center.x - touch.view.center.x ==102 ||kong.center.x - touch.view.center.x ==-102 ) {

[UIView animateWithDuration:1 animations:^{

touch.view.center = kong.center;

kong.center = temp;

}];

}

}

if (kong.center.x == touch.view.center.x) {

if (kong.center.y - touch.view.center.y ==102 ||kong.center.y - touch.view.center.y ==-102 ) {

[UIView animateWithDuration:1 animations:^{

touch.view.center = kong.center;

kong.center = temp;

}];

}

}

}

}

转自:http://www.cnblogs.com/-yun/p/4367011.html

iOS拼图的更多相关文章

  1. iOS 滑块拼图游戏(Puzzle8)

    代码地址如下:http://www.demodashi.com/demo/11505.html 一.准备工作 先了解一个定义和定理 定义:在一个1,2,...,n的排列中,如果一对数的前后位置与大小顺 ...

  2. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  3. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  4. iOS网络加载图片缓存策略之ASIDownloadCache缓存优化

    iOS网络加载图片缓存策略之ASIDownloadCache缓存优化   在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用 ...

  5. iOS小结

    一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始等待用户的操作,自动释放 ...

  6. ios的一些知识点

    ios的一些知识点 一 非ARC的内存管理情况 1-autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段落,开 ...

  7. (转载)ios的一些知识点

    ios的一些知识点 一 非ARC的内存管理情况  1-autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一 段落 ...

  8. CallKit iOS 教程

    原文:CallKit Tutorial for iOS 作者:József Vesza 译者:kmyhy 对 VoIP App 开发者来说,iOS 的支持并不友好.尤其是它的通知发送这一块,太糙了.你 ...

  9. iOS审核拒绝苹果官方原因详解

    1.1不当内容应用程序不应该包括攻击性,敏感,令人不悦,侮辱或者品味低下的内容.例如: 1.1.1 诽谤或者人格侮辱的内容,包括引用或者评论宗教.种族.性取向.性别或者其他目标群体的内容,特别是该应用 ...

随机推荐

  1. 关于MFC的DLL调用方法问题

    参考资料: 一.dll导出方式: MFC的DLL函数导出方法有两种:一种是通过模块定义文件DEF文件:另一种是在导出函数前加_declspec(dllexport). 1.def文件方法: 只需要在E ...

  2. list dict set comprehension 列表推导式 (字典推导式,集合推导式)

    从一个list生成新的list [ word.upper() for word in 'hellO worlD!' ] 简单的语法,如果不用list comprehension, 则要用更长的代码. ...

  3. Android之SurfaceView实现视频播放

    1.案例一 布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...

  4. Failed to install xxxx.apk on device 'emulator-5554!

    异常信息:[HelloAndroid] Performing com.example.helloandroid.HelloAndroid activity launch[HelloAndroid] U ...

  5. bzoj 1113 海报pla

    Description N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. Input 第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的长与宽.其值 ...

  6. jcrop的bug

    1 360(7.1.1.620,内核:31.0.1650.63)的极速模式下,出现裁剪框后,鼠标点击,页面就会滑动到底部. 查看了下源码,发现是下面的代码: function watchKeys() ...

  7. 洛谷【P1873】砍树

    我对二分的理解:https://www.cnblogs.com/AKMer/p/9737477.html 题目传送门:https://www.luogu.org/problemnew/show/P18 ...

  8. Centos下Yum安装PHP5.5

    默认的版本太低了,手动安装有一些麻烦,想采用Yum安装的可以使用下面的方案: 1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们 ...

  9. logback个人使用配置

    提供一个目前个人供词使用的,无需日志汇总的日志配置文件: <?xml version="1.0" encoding="UTF-8"?> <co ...

  10. 编译Python出现Tab,空格的问题

    我们编译python代码时, 经常出现各种因为tab和空格的问题, 例如: IndentationError: unindent does not match any outer indentatio ...