今天闲来无事研究了下拼图,不多说,附代码

原图和效果图如下:

#define SPACE 2 //小图边距
#define NUMBER 3 //拼图横竖个数#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];[self creatView];[self segmentImage];
}//创建背景视图
- (void)creatView
{UIView *view = [[UIView alloc] initWithFrame:CGRectMake(9, 42, 302, 302)];view.backgroundColor = [UIColor magentaColor];view.tag = 100;[self.view addSubview:view];
}//对图片进行分割
- (void)segmentImage
{//<1>获取分割的图片UIImage *image = [UIImage imageNamed:@"king2"];//<2>获取分割以后的每一小块图片的宽和高float newImageW = image.size.width / NUMBER;float newImageH = image.size.height / NUMBER;NSLog(@"%f",newImageW);//获取背景视图UIView *backView = [self.view viewWithTag:100];//<3>设置number个子视图for (int i = 0; i < NUMBER; i++){for (int j = 0; j < NUMBER; j++){UIImageView *littleImageView = [[UIImageView alloc] initWithFrame:CGRectMake(SPACE + j * newImageW, SPACE + i * newImageH, newImageW - SPACE, newImageH - SPACE)];//<4>分割UIImage对象//CGImageCreateWithImageInRect将UIImge图片按照规定的大小进行分割//image.CGImage 将UIImage转化成CGImageCGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage, littleImageView.frame);//<5>将CGImage转化成UIImageUIImage *imageNew = [UIImage imageWithCGImage:imageRef];//<6>将新获得的小图片 添加在16个UIImageView上littleImageView.image = imageNew;//<7>隐藏某个子视图if (i * j == 4){littleImageView.tag = 998;littleImageView.hidden = YES;}//<8>为所有的imageView视图添加手势littleImageView.userInteractionEnabled = YES;[self addGestureRecgonizerOnImageView:littleImageView];//将16个imageView添加到backView上[backView addSubview:littleImageView];}}
}//为每一个UIImageView视图添加手势----自定义方法
-(void)addGestureRecgonizerOnImageView:(UIImageView *)imageView
{UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];tap.numberOfTouchesRequired = 1;tap.numberOfTapsRequired = 1;[imageView addGestureRecognizer:tap];
}- (void)tapAction:(UITapGestureRecognizer *)tap
{UIImageView *imageView = (UIImageView *)tap.view;//获取空白区域的视图UIImageView *blockView = (UIImageView *)[self.view viewWithTag:998];BOOL isEquelX75 = fabs(imageView.frame.origin.x - blockView.frame.origin.x) == 100;BOOL isEquelY75 = fabs(imageView.frame.origin.y - blockView.frame.origin.y) == 100;BOOL isEquelX0 = fabs(imageView.frame.origin.x - blockView.frame.origin.x) == 0;BOOL isEquelY0 = fabs(imageView.frame.origin.y - blockView.frame.origin.y) == 0;if((isEquelX75 && isEquelY0 ) || (isEquelX0 && isEquelY75)){//交换两个子视图的显示位置[UIView animateWithDuration:0.3  animations:^{CGRect rect = imageView.frame;imageView.frame = blockView.frame;blockView.frame = rect;} completion:nil];}}@end

最终点击效果

iOS开发-简单制作九宫格拼图相关推荐

  1. iOS开发UI篇—九宫格坐标计算

    iOS开发UI篇-九宫格坐标计算 一.要求 完成下面的布局 二.分析 寻找左边的规律,每一个uiview的x坐标和y坐标. 三.实现思路 (1)明确每一块用得是什么view (2)明确每个view之间 ...

  2. iOS开发------简单实现图片多选功能(Photos.framework篇)

    Photos.framework是iOS8后苹果推出的一套替代AssetsLibrary.framework获取相册资源的原生库,至于AL库,欢迎大家给博文iOS开发--简单实现图片多选功能(Asse ...

  3. (0054)iOS开发之制作静态库详解

    最近在做Apple的IOS开发,有开发静态库的需求,下面就简单写一个静态库和一个调用静态库的例子. 静态库的编写: 1. 静态库工程的建立: Xcode New一个新的project,选择IOS下面的 ...

  4. iOS开发-简单工厂模式

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.概念很长,iOS开发中最常 ...

  5. iOS开发简单高效的数据存储

    在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题,你是用什么方法来持久保存数据的?这是在几乎每一次关于iOS技术的交流或讨论都会被提到的问题,而且大家对这个问题的热情持续高涨.本文主要从概 ...

  6. iOS开发-简单图片背景替换 实现抠图效果

    之前好奇, 想实现这样的功能   -----> iOS图像处理-(jpg去除白色背景) 把一张图片(.jpg)的白色背景抠掉,转成.png 格式的有alpha通道的透明图. 原图黑白分明, 像这 ...

  7. iOS开发-简单图片背景替换(实现抠图效果)

    之前好奇, 想实现这样的功能   -----> iOS图像处理-(jpg去除白色背景) 把一张图片(.jpg)的白色背景抠掉,转成.png 格式的有alpha通道的透明图. 原图黑白分明, 像这 ...

  8. 【Android 2D 游戏开发(5)】——九宫格拼图(苍老师版)

    效果: 开始界面: 3x3: 4x4: 5x5: 拼图成功后苍老师对你表示爱意.. 图片切割方法 有些朋友看到这篇文章可能会想知道怎么切割图片(虽然我做这个游戏并没有切割图片..),我就把切割图片的方 ...

  9. iOS开发-简单的图片查看器

    现在你只要拿着手机,不管你Android还是iOS,新闻类的App不可避免都有一个功能就是图片查看,做个专题,查看一下内容,App Store中也有专门针对图片浏览的App,鉴于目前所知有限,无法做到 ...

最新文章

  1. c++ lambda函数_C++ Lambda表达式
  2. 计算机网络基础 — 网络设备转发原理
  3. DL之HNN:基于HNN(subplot)将凌乱数字矩阵图像(模拟手写数字图片)实现转为最相近的阿拉伯数字
  4. 周末随笔 | 问好一个问题,有的放矢
  5. 标准差、方差、协方差的区别
  6. 第七章数组答案C语言,C语言复习题及答案-第七章-数组
  7. matlab 泡泡图,使用matlab绘制2维、3维气泡图
  8. [转]python3之模块psutil系统性能信息
  9. Python进程间传递套接字问题
  10. Spark记录-Scala异常与处理
  11. mybatis中$和#号的区别
  12. 线索二叉树实现(中序)
  13. python改文件后缀名_python 批量修改文件后缀名(示例)
  14. Jupyter Notebook 数学公式
  15. 45个实用的前端开发工具汇总
  16. C语言:int转char
  17. iso-8859-1表示中文汉字
  18. 京区航天研究所 哪些比较好的研究所?
  19. 手机ufs2.1测试软件,内置UFS2.1:小米9手机闪存速度测试
  20. MyEclipse全局搜索

热门文章

  1. 【毕业前夕,畅谈科研】2000-2010,大学-硕士-博士[转]
  2. mysql建立存储过程报错_【松勤教育】MySQL如何创建存储过程
  3. 硬核数据治理体系(思维导图)
  4. 【自制插件】B站专栏语音朗读器 v1.0 专栏你太美
  5. 懵了!一夜之间,Rust 审核团队突然集体辞职?
  6. C++/MFC编程技巧
  7. 大尾小尾(大端,小端)模式
  8. 英语二 - 常用词根六
  9. cuda装成CPU版本如何装回来
  10. 机器视觉在PCB线路板综合检测的应用