当前位置: 首页 > news >正文

【愤怒的小方块案例 Objective-C语言】

一、我们来做这个愤怒的小方块啊,

通知

1.我们新建一个项目,

通知

Name:18-愤怒的小方块,

通知

Dynamic,不能够处理圆形的View,Dynamic都是方的,如果你想处理圆的View的话,需要用另外一个东西,什么Kit,专门做游戏的一个iOS框架,

通知

首先,我们把这个项目的竖屏,去掉勾选,只留一个Landscape Left,

通知

2.接下来,我们去创建一个UIView,一个红色的View,先让它一拖拽,能够飞起来,再去考虑蓝色的View,碰撞的问题,

这个思路,大概是这个样子的,首先,有一个拖拽的手势,

通知

超出了一个圆形的范围以后,它就不能够再拖拽了,

通知

我之前跟大家说的那个CGPath包含某一个点,它超过某一个圆形的区域,就不能够再拖拽了,如果你在圆形的区域里边撒手的话,看一下我手指的这个位置,跟你这个View一开始的中心,我这儿加了一个小黑点儿,看着方便一些,跟我中间的这个距离,是多少,然后我的推力也会依次的变大,

这个红色的View,本身带一个重力,到时候你往外扔的时候,它会自动的落下来,

还有这个方向的问题,也是算一个偏移量,把它用向量的形式取一个反,让它往反方向去推,推完了以后,再带一个重力,它就会落下来,

3.// 添加小鸟

通知

UIView *bird = [[UIView alloc] init];

bird.frame = CGRectMake(150,250,30,30);

bird.backgroundColor = [UIColor redColor];

[self.view addSubview:bird];

通知

command + R,

通知

4.我要去拖拽这个红色的View,

我要去给这个红色的View添加一个手势,

// 为小鸟添加一个拖拽的手势

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc ] initWithTarget:self action:@selector(pan:)];

通知

接下来,去添加,给这个View添加,

[bird addGestureRecognizer:pan];

通知

5.// 实现小鸟拖拽的方法

- (void)pan:(UIPanGestureRecognizer *)sender{

}

通知

我直接改它的Transform,

通知

之前讲拖拽手势,不是有一个图片吗,图片我们直接通过它的translate有一个方法,可以拿到它每一次的偏移量,然后,这个偏移量,只是在它自身、红色View的translate基础上去累加,去加这个偏移量,然后,最后不要忘了那个归零的操作,

1)// 获取移动的偏移量

[sender translationInView:sender.view];

通知

看看这个View到底移动了多少,

写一个CGPoint offset = [sender translationInView:sender.view];

通知

然后呢,这个偏移量有了以后,我们再去把它,改变一下transform,

// 改变红色View的transform

然后,红色的View,在这儿怎么样去拿,self.bird?sender.view,是不是也是一样的,

在这儿你可以搞一个全局的,或者sender.view,也是一样的,

我们是在累加,所以,不要用Make,

不用Make的话,会有问题,你再清一个零,问题就解决了,

sender.view.transform = CGAffineTransform

通知

sender.view.transform = CGAffineTransform(sender.view.transform,offset.x,offset.y);

通知

// 归0

[sender setTranslation:CGPointZero inView:sender.view];

通知

command + R,

通知

拖拽搞定,

6.如果超出了以之前的View.center,半径是100的范围,那就不让你再去拖拽了,你就直接在这个pan:方法里边,return,就完了,

通知

首先啊,我这个距离,应该怎么着去计算,

通知

首先,红色View的Center是有的,然后呢,我现在偏移量,我也是可以求出来的,

就是我当前新的手指的位置,肯定也会获取到的,

我获取到以后,就可以去计算出来,我这个当前手指的位置,跟我之前这个红色View的Center,的偏移量,

那有了这个偏移量,我要算它们两个的距离,怎么算,

对,勾股定理嘛,勾三、股四、玄五,

通知

假设,红色的View之前在这儿,然后,我把它拖到了黄色方块儿的位置,我可以计算出之前红色View的Center,和我这个黄色方块儿的Center之间的偏移量,这两个黄色箭头的距离,可以算出来,

我现在要求的是,这个距离,

通知

能算出来吧,对吧,它的平方 + 它的平方,再开方,

就可以了吧,

接下来,我们去计算这个距离,那计算距离之前呢,我要有偏移量,

有X变了多少,Y变了多少,

通知

那么,这个offset,能用吗,不能吧,这是增加量,这个offset我们是一直在归零的,

通知

想想我们之前在讲旋转的时候,我们直接输出的话,是从0开始,一点儿一点儿的去累加,如果我们归零了以后,是不是只是在去输出它的夹角,

实际上,当前的这个偏移量,也是一样的,它输出的应该就是0啊,1啊,这些,

输出一下试试:

NSLog(@“%@”,NSStringFromCGPoint(offset));

通知

实际上,它输出的,只是我每一次拖动的增量,

通知

也就是0、1、2、3、4、5啊,也就这么大了,除非我拖的很快,

反正它这个offset,肯定是不能用的,

它不是一共拖了多少,而是每一次,跟上一次相比,拖了多少,

那这个时候,怎么办,累加,累加是不是还要保存啊,有没有别的办法,

好,我们说,我们之前在用touchBegan:touchMove:的时候,我们调用的获取手指的位置,叫做locationInView:

然后呢,这个方法叫什么,translationInView:

通知

Translation是什么,是你移动了多少,

sender里边还有一个locationInView:

通知

这个locationInView:

相关文章:

  • Java实现数据结构——不带头单链表
  • 墨烯的Java技术栈-数据结构与算法基础-010
  • STM32_实现双线程控制LED交替闪烁(UCOS)
  • 【C语言】常见的字符串函数
  • 雷池WAF+Modsecurity安装防护及系统加固
  • 【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人
  • 【面试题】IPS(入侵防御系统)和IDS(入侵检测系统)的区别
  • 人脸特征68点识别 C++
  • 哪吒汽车,正在等待“太乙真人”的拯救
  • 监听 web 容器内的网络请求
  • vCenter VXR01405C ALARM Certificate is about to expire
  • 【python】scikit-learn安装失败No matching distribution found for scikit-learn
  • 【数据库原理】总结(期末版)
  • 机器学习 C++ 的opencv实现SVM图像二分类的训练 (二)【附源码】
  • 我在高职教STM32——GPIO入门之按键输入(1)
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【Linux系统编程】快速查找errno错误码信息
  •  D - 粉碎叛乱F - 其他起义
  • Hibernate【inverse和cascade属性】知识要点
  • java2019面试题北京
  • Java小白进阶笔记(3)-初级面向对象
  • Js基础知识(一) - 变量
  • Mybatis初体验
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • React组件设计模式(一)
  • socket.io+express实现聊天室的思考(三)
  • vagrant 添加本地 box 安装 laravel homestead
  • Web Storage相关
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 关于Java中分层中遇到的一些问题
  • 如何优雅地使用 Sublime Text
  • 使用SAX解析XML
  • 我感觉这是史上最牛的防sql注入方法类
  • 我看到的前端
  • 走向全栈之MongoDB的使用
  • 06-01 点餐小程序前台界面搭建
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​渐进式Web应用PWA的未来
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #控制台大学课堂点名问题_课堂随机点名
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (转)3D模板阴影原理
  • (转)nsfocus-绿盟科技笔试题目
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET 回调、接口回调、 委托
  • .Net 垃圾回收机制原理(二)
  • .Net7 环境安装配置
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @Autowired 与@Resource的区别
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序