iOS开发-简单制作九宫格拼图
今天闲来无事研究了下拼图,不多说,附代码
原图和效果图如下:
#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开发-简单制作九宫格拼图相关推荐
- iOS开发UI篇—九宫格坐标计算
iOS开发UI篇-九宫格坐标计算 一.要求 完成下面的布局 二.分析 寻找左边的规律,每一个uiview的x坐标和y坐标. 三.实现思路 (1)明确每一块用得是什么view (2)明确每个view之间 ...
- iOS开发------简单实现图片多选功能(Photos.framework篇)
Photos.framework是iOS8后苹果推出的一套替代AssetsLibrary.framework获取相册资源的原生库,至于AL库,欢迎大家给博文iOS开发--简单实现图片多选功能(Asse ...
- (0054)iOS开发之制作静态库详解
最近在做Apple的IOS开发,有开发静态库的需求,下面就简单写一个静态库和一个调用静态库的例子. 静态库的编写: 1. 静态库工程的建立: Xcode New一个新的project,选择IOS下面的 ...
- iOS开发-简单工厂模式
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.概念很长,iOS开发中最常 ...
- iOS开发简单高效的数据存储
在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题,你是用什么方法来持久保存数据的?这是在几乎每一次关于iOS技术的交流或讨论都会被提到的问题,而且大家对这个问题的热情持续高涨.本文主要从概 ...
- iOS开发-简单图片背景替换 实现抠图效果
之前好奇, 想实现这样的功能 -----> iOS图像处理-(jpg去除白色背景) 把一张图片(.jpg)的白色背景抠掉,转成.png 格式的有alpha通道的透明图. 原图黑白分明, 像这 ...
- iOS开发-简单图片背景替换(实现抠图效果)
之前好奇, 想实现这样的功能 -----> iOS图像处理-(jpg去除白色背景) 把一张图片(.jpg)的白色背景抠掉,转成.png 格式的有alpha通道的透明图. 原图黑白分明, 像这 ...
- 【Android 2D 游戏开发(5)】——九宫格拼图(苍老师版)
效果: 开始界面: 3x3: 4x4: 5x5: 拼图成功后苍老师对你表示爱意.. 图片切割方法 有些朋友看到这篇文章可能会想知道怎么切割图片(虽然我做这个游戏并没有切割图片..),我就把切割图片的方 ...
- iOS开发-简单的图片查看器
现在你只要拿着手机,不管你Android还是iOS,新闻类的App不可避免都有一个功能就是图片查看,做个专题,查看一下内容,App Store中也有专门针对图片浏览的App,鉴于目前所知有限,无法做到 ...
最新文章
- c++ lambda函数_C++ Lambda表达式
- 计算机网络基础 — 网络设备转发原理
- DL之HNN:基于HNN(subplot)将凌乱数字矩阵图像(模拟手写数字图片)实现转为最相近的阿拉伯数字
- 周末随笔 | 问好一个问题,有的放矢
- 标准差、方差、协方差的区别
- 第七章数组答案C语言,C语言复习题及答案-第七章-数组
- matlab 泡泡图,使用matlab绘制2维、3维气泡图
- [转]python3之模块psutil系统性能信息
- Python进程间传递套接字问题
- Spark记录-Scala异常与处理
- mybatis中$和#号的区别
- 线索二叉树实现(中序)
- python改文件后缀名_python 批量修改文件后缀名(示例)
- Jupyter Notebook 数学公式
- 45个实用的前端开发工具汇总
- C语言:int转char
- iso-8859-1表示中文汉字
- 京区航天研究所 哪些比较好的研究所?
- 手机ufs2.1测试软件,内置UFS2.1:小米9手机闪存速度测试
- MyEclipse全局搜索