//
//  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相关推荐

  1. iOS中UIDynamic物理仿真详解

    本文中所有代码演示均有GitHub源码,点击下载 UIDynamic简介 简介: UIKit动力学最大的特点是将现实世界动力驱动的动画引入了UIKit,比如动力,铰链连接,碰撞,悬挂等效果,即将2D物 ...

  2. 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 ...

  3. [Buzz.Today]2011.05.25

    >> VMWare的Open Source Pass - CloudFoundry VMWare推出了开源Pass:CloudFoundary,但是现在只是支持少数几种语言与环境:Java ...

  4. 【UIDynamic例子】挂起的方块

    通过前面的动力学小Demo(本文默认你已经看过这篇Blog:传送门),我们对UIKit中的UIDynamic已经有了初步的认识.现在我们写个更加有趣的Demo:模拟一个用弹性绳子挂起的小方块,用户可以 ...

  5. 互动网计算机频道图书7日销售排行(05.20-05.26)

    互动网计算机频道图书7日销售排行(05.20-05.26) 1.Hadoop权威指南(中文版) 2.人人都是产品经理 3.演讲之禅:一位技术演讲家的自白 内容简介 本书既实用又引人入胜.作为职业演讲家 ...

  6. 函数05 - 零基础入门学习C语言36

    第七章:函数05 让编程改变世界 Change the world by program 函数的嵌套调用 嵌套定义就是在定义一个函数时,其函数体内又包含另一个函数的完整定义. 然而,C语言不能嵌套定义 ...

  7. 数据结构与算法:05 Leetcode同步练习(一)

    Leetcode同步练习(一) 题目01:两数之和 题号:1 难度:简单 https://leetcode-cn.com/problems/two-sum/ 给定一个整数数组 nums 和一个目标值 ...

  8. 05后都上清华了!首批丘成桐数学领军人才名单发布,三位菲尔兹奖得主为其授课,周末就来学校报到...

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 不 ...

  9. 指针05 - 零基础入门学习C语言45

    第八章:指针05 让编程改变世界 Change the world by program 字符串与指针 (1) 用字符数组存放一个字符串,然后输出该字符串. 例题一:定义一个字符数组,对它初始化,然后 ...

  10. 前端性能优化——从 10 多秒到 1.05 秒

    https://lishaoy.net 关于 性能优化 是个大的面,这篇文章主要涉及到 前端 的几个点,如 前端性能优化 的流程.常见技术手段.工具等. 提及 前端性能优化 ,大家应该都会想到 雅虎军 ...

最新文章

  1. SQL 数据完整性 基础知识
  2. js中用tagname和id获取元素的3种方法
  3. Codeforces 777E:Hanoi Factory(贪心+栈)
  4. 详解分布式一致性机制
  5. flume简介(大数据技术)
  6. 11 为了进一步_浅聊小米11发布会
  7. IT桔子分布式项目1
  8. Leetcode--221--Maximal Square
  9. 算法笔记_面试题_12.二叉搜索树的最近公共祖先
  10. MyBatis架构图
  11. PCWorld:乔布斯病休遗留诸多问题
  12. 漫谈WebQQ 协议
  13. 太爽了!javaweb教程百度云盘
  14. C语言猜数字游戏及关机程序
  15. 开源项目——小Q聊天机器人V1.3
  16. linux 设置中国时区
  17. ZJM 与纸条(KMP算法)
  18. DNS服务器可能不可用 win11解决方法
  19. JAVA中JVM的重排序详细介绍(写得很明白)
  20. 如何在Arch Linux搭建高效便捷的平铺式桌面

热门文章

  1. Linux下svn 安装搭建配置流程
  2. Entity Framework 学习总结之三:架构组成介绍
  3. python字符串取消转义_python取消转义,除了r还有什么?可以调用函数取消转义吗?...
  4. Python中常用的内置方法
  5. java扶贫,基于jsp的扶贫网站-JavaEE实现扶贫网站 - java项目源码
  6. vmare fusion:No Ethernet Connection VMware Fusion 12 macOS Big Sur
  7. Casper Labs成为数据隐私协议联盟的创始成员
  8. NBA Top Shot巨鲸17.5万美元购买的球星卡目前已值2000万美元
  9. 【金融申请评分卡】数据准备 - 缺失值数据清洗
  10. Axure高保真智慧校园管理系统/校园管理/人事管理/学籍管理/教学管理/流程审批/备课管理/考务管理/成绩管理/排课管理/选课管理/选课系统/调课申请/教师考评管理/web端管理系统