05-UIDynamic
// // ViewController.m // 06-UIDynamic#import "ViewController.h"@interface ViewController () @property (weak, nonatomic) IBOutlet UIView *blueView; /** 物理仿真器 */ @property (nonatomic, strong) UIDynamicAnimator *animator; @property (weak, nonatomic) IBOutlet UISegmentedControl *segmentControl; @end@implementation ViewController- (UIDynamicAnimator *)animator {if (!_animator) {// 创建物理仿真器(ReferenceView, 参照视图, 其实就是设置仿真范围)_animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];}return _animator; }- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib. self.blueView.transform = CGAffineTransformMakeRotation(M_PI_4); }- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {// 获得触摸点UITouch *touch = [touches anyObject];CGPoint point = [touch locationInView:self.view];// 创建吸附\捕捉行为UISnapBehavior *snap = [[UISnapBehavior alloc] initWithItem:self.blueView snapToPoint:point];// 防抖系数(值越小, 越抖)snap.damping = 1.0;// 添加行为 [self.animator removeAllBehaviors];[self.animator addBehavior:snap]; }- (void)testCollision2 {// 1.创建 碰撞行为UICollisionBehavior *collision = [[UICollisionBehavior alloc] init];[collision addItem:self.blueView];// [collision addItem:self.segmentControl];// 添加边界// CGFloat startX = 0;// CGFloat startY = self.view.frame.size.height * 0.5;// CGFloat endX = self.view.frame.size.width;// CGFloat endY = self.view.frame.size.height;// [collision addBoundaryWithIdentifier:@"line1" fromPoint:CGPointMake(startX, startY) toPoint:CGPointMake(endX, endY)];// [collision addBoundaryWithIdentifier:@"line2" fromPoint:CGPointMake(endX, 0) toPoint:CGPointMake(endX, endY)]; CGFloat width = self.view.frame.size.width;UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, width, width)];[collision addBoundaryWithIdentifier:@"circle" forPath:path];// 2.创建物理仿真行为 - 重力行为UIGravityBehavior *gravity = [[UIGravityBehavior alloc] init];gravity.magnitude = 10;[gravity addItem:self.blueView];// 3.添加行为 [self.animator addBehavior:collision];[self.animator addBehavior:gravity]; }- (void)testCollision {// 1.创建 碰撞行为UICollisionBehavior *collision = [[UICollisionBehavior alloc] init];// 让参照视图的bounds变为碰撞检测的边框collision.translatesReferenceBoundsIntoBoundary = YES;[collision addItem:self.blueView];[collision addItem:self.segmentControl];// 2.创建物理仿真行为 - 重力行为UIGravityBehavior *gravity = [[UIGravityBehavior alloc] init];gravity.magnitude = 100;[gravity addItem:self.blueView];// 3.添加行为 [self.animator addBehavior:collision];[self.animator addBehavior:gravity]; }- (void)testGravity {// 1.创建物理仿真行为 - 重力行为UIGravityBehavior *gravity = [[UIGravityBehavior alloc] init];[gravity addItem:self.blueView];// 重力方向// gravity.gravityDirection = CGVectorMake(100, 100);// 重力加速度()gravity.magnitude = 10;// 100 point/s²// 移动的距离 = 1/2 * magnitude * 时间²// 2.添加 物理仿真行为 到 物理仿真器 中, 开始物理仿真 [self.animator addBehavior:gravity]; } @end
转载于:https://www.cnblogs.com/laugh/p/6962665.html
05-UIDynamic相关推荐
- iOS中UIDynamic物理仿真详解
本文中所有代码演示均有GitHub源码,点击下载 UIDynamic简介 简介: UIKit动力学最大的特点是将现实世界动力驱动的动画引入了UIKit,比如动力,铰链连接,碰撞,悬挂等效果,即将2D物 ...
- Go 中 time.Parse 报错:year/month/day hour/minute/second out of range 时间格式化为什么是 2006-01-02 15:04:05?
1. 问题现象 在使用 Go 语言的 time.Parse 解析时间时遇到以下错误: func main() {timeParse, err := time.Parse("2006-11-0 ...
- [Buzz.Today]2011.05.25
>> VMWare的Open Source Pass - CloudFoundry VMWare推出了开源Pass:CloudFoundary,但是现在只是支持少数几种语言与环境:Java ...
- 【UIDynamic例子】挂起的方块
通过前面的动力学小Demo(本文默认你已经看过这篇Blog:传送门),我们对UIKit中的UIDynamic已经有了初步的认识.现在我们写个更加有趣的Demo:模拟一个用弹性绳子挂起的小方块,用户可以 ...
- 互动网计算机频道图书7日销售排行(05.20-05.26)
互动网计算机频道图书7日销售排行(05.20-05.26) 1.Hadoop权威指南(中文版) 2.人人都是产品经理 3.演讲之禅:一位技术演讲家的自白 内容简介 本书既实用又引人入胜.作为职业演讲家 ...
- 函数05 - 零基础入门学习C语言36
第七章:函数05 让编程改变世界 Change the world by program 函数的嵌套调用 嵌套定义就是在定义一个函数时,其函数体内又包含另一个函数的完整定义. 然而,C语言不能嵌套定义 ...
- 数据结构与算法:05 Leetcode同步练习(一)
Leetcode同步练习(一) 题目01:两数之和 题号:1 难度:简单 https://leetcode-cn.com/problems/two-sum/ 给定一个整数数组 nums 和一个目标值 ...
- 05后都上清华了!首批丘成桐数学领军人才名单发布,三位菲尔兹奖得主为其授课,周末就来学校报到...
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 不 ...
- 指针05 - 零基础入门学习C语言45
第八章:指针05 让编程改变世界 Change the world by program 字符串与指针 (1) 用字符数组存放一个字符串,然后输出该字符串. 例题一:定义一个字符数组,对它初始化,然后 ...
- 前端性能优化——从 10 多秒到 1.05 秒
https://lishaoy.net 关于 性能优化 是个大的面,这篇文章主要涉及到 前端 的几个点,如 前端性能优化 的流程.常见技术手段.工具等. 提及 前端性能优化 ,大家应该都会想到 雅虎军 ...
最新文章
- SQL 数据完整性 基础知识
- js中用tagname和id获取元素的3种方法
- Codeforces 777E:Hanoi Factory(贪心+栈)
- 详解分布式一致性机制
- flume简介(大数据技术)
- 11 为了进一步_浅聊小米11发布会
- IT桔子分布式项目1
- Leetcode--221--Maximal Square
- 算法笔记_面试题_12.二叉搜索树的最近公共祖先
- MyBatis架构图
- PCWorld:乔布斯病休遗留诸多问题
- 漫谈WebQQ 协议
- 太爽了!javaweb教程百度云盘
- C语言猜数字游戏及关机程序
- 开源项目——小Q聊天机器人V1.3
- linux 设置中国时区
- ZJM 与纸条(KMP算法)
- DNS服务器可能不可用 win11解决方法
- JAVA中JVM的重排序详细介绍(写得很明白)
- 如何在Arch Linux搭建高效便捷的平铺式桌面
热门文章
- Linux下svn 安装搭建配置流程
- Entity Framework 学习总结之三:架构组成介绍
- python字符串取消转义_python取消转义,除了r还有什么?可以调用函数取消转义吗?...
- Python中常用的内置方法
- java扶贫,基于jsp的扶贫网站-JavaEE实现扶贫网站 - java项目源码
- vmare fusion:No Ethernet Connection VMware Fusion 12 macOS Big Sur
- Casper Labs成为数据隐私协议联盟的创始成员
- NBA Top Shot巨鲸17.5万美元购买的球星卡目前已值2000万美元
- 【金融申请评分卡】数据准备 - 缺失值数据清洗
- Axure高保真智慧校园管理系统/校园管理/人事管理/学籍管理/教学管理/流程审批/备课管理/考务管理/成绩管理/排课管理/选课管理/选课系统/调课申请/教师考评管理/web端管理系统