IOS基础之愤怒的小方块

//
//  ViewController.m
//  18-愤怒的小方块
//
//  Created by 鲁军 on 2021/4/17.
//#import "ViewController.h"typedef struct YHValue YHValue;
struct YHValue {CGFloat startValue;CGFloat endValue;};
static inline YHValue
YHValueMake(CGFloat startValue,CGFloat endValue){YHValue value;value.startValue = startValue;value.endValue = endValue;return value;
}@interface ViewController () <UICollisionBehaviorDelegate>
@property(nonatomic,strong)UIDynamicAnimator *animator;
@property(nonatomic,weak)UIView *pigView;
@property(nonatomic,strong)UIGravityBehavior *gravity;- (IBAction)refresh:(id)sender;@end@implementation ViewController- (IBAction)refresh:(id)sender {[self setupUI];
}- (UIDynamicAnimator *)animator{if(!_animator){_animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];}return _animator;
}- (void)viewDidLoad {[super viewDidLoad];[self setupUI];}-(void) setupUI{UIView *birdView = [[UIView alloc] initWithFrame:CGRectMake(150, 250, 30, 30)];birdView.backgroundColor = [UIColor redColor];[self.view addSubview:birdView];UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];[birdView addGestureRecognizer:pan];UIView *pigView = [[UIView alloc] initWithFrame:CGRectMake(500, 250, 30, 30)];pigView.backgroundColor = [UIColor blueColor];self.pigView = pigView;[self.view addSubview:self.pigView];//碰撞行为UICollisionBehavior *collision = [[UICollisionBehavior alloc] initWithItems:@[pigView,birdView]];collision.translatesReferenceBoundsIntoBoundary = YES;//设置代理collision.collisionDelegate = self;[self.animator addBehavior:collision];
}-(void)pan:(UIPanGestureRecognizer *)sender{CGPoint currentPoint = [sender locationInView:self.view];CGFloat offsetX = sender.view.center.x - currentPoint.x;CGFloat offsetY = sender.view.center.y - currentPoint.y;CGFloat distance = sqrt(offsetX  * offsetX + offsetY * offsetY);//绘制一个范围 圆的范围CGMutablePathRef path = CGPathCreateMutable();CGPathAddArc(path, NULL, sender.view.center.x, sender.view.center.y, 100, 0, 2*M_PI, 1);if(CGPathContainsPoint(path, NULL, currentPoint, NO)){if(sender.state==UIGestureRecognizerStateEnded){//添加重力UIGravityBehavior * gravity = [[UIGravityBehavior alloc] initWithItems:@[sender.view]];self.gravity = gravity;//添加推力UIPushBehavior *push = [[UIPushBehavior alloc] initWithItems:@[sender.view] mode:UIPushBehaviorModeInstantaneous];//瞬时推力push.pushDirection = CGVectorMake(offsetX, offsetY);//添加量级push.magnitude = [self resultWithConsult:distance andResultValue:YHValueMake(0, 1) andConsultValue:YHValueMake(0, 100)];[self.animator addBehavior:gravity];[self.animator addBehavior:push];/*NSLog(@"%f",push.magnitude);NSLog(@"%f",distance);*/}}else{return;}//获取移动的偏离量CGPoint offset =  [sender translationInView:sender.view];//改变红色的 view 的 transformsender.view.transform = CGAffineTransformTranslate(sender.view.transform, offset.x, offset.y);//归0[sender setTranslation:CGPointZero inView:self.view];
}- (void)collisionBehavior:(UICollisionBehavior *)behavior beganContactForItem:(id<UIDynamicItem>)item1 withItem:(id<UIDynamicItem>)item2 atPoint:(CGPoint)p{NSLog(@"6666");[self.gravity addItem:self.pigView];
}-(CGFloat)resultWithConsult:(CGFloat)consule andResultValue:(YHValue) resultValue andConsultValue:(YHValue) consultValue{//0   -  100//0   -  1CGFloat a = (resultValue.startValue - resultValue.endValue) / (consultValue.startValue - consultValue.endValue);CGFloat b = resultValue.startValue - (a * consultValue.startValue);return a * consule + b;
}@end

IOS基础之愤怒的小方块相关推荐

  1. iOS基础问答面试题连载-附答案

    2017-02-02 timhbw CocoaChina 以下是一些自己收集的比较基础的问题(大神可以忽略),附上答案,方便大家阅读.俗话说得好,基础不牢,地动山摇.文章末尾会提供PDF版的文档,方便 ...

  2. IOS基础之NSFounation框架的NSDictionary,NSMutableDictionary的使用

    IOS基础之NSFounation框架的NSDictionary,NSMutableDictionary的使用 // // main.m // Day11-NSFoudation框架 // // Cr ...

  3. IOS基础之NSString,NSMutableString,NSArray的基本使用

    IOS基础之NSString,NSMutableString,NSArray的基本使用 // // main.m // Day10-Foundation框架 // // Created by 鲁军 o ...

  4. IOS基础之UIDynamicAnimator动力学入门-01

    IOS基础之UIDynamicAnimator动力学入门 01-重力 // // ViewController.m // 01-重力 // // Created by 鲁军 on 2021/4/15. ...

  5. 作为第一期iOS基础班学生,MJ广东开校之我见(原稿)

    作为第一期iOS基础班学生,MJ广东开校之我见 先作自我介绍,我是2015年4月6日开班的第一期iOS基础班成员.我的名字叫静静(一看就是骗人的哈哈.).不得不说,来到黑马真的是我从老家出来6年里面最 ...

  6. 黑马程序员-iOS基础-Objective-C基础(六)内存管理

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序员-iOS基础-Objective-C基础(六)内存管理 一.内存管理的必要性 移动设备 ...

  7. 使用 icon 字体图标出现小方块问题

    今天在弄一个vue 项目的时候,碰到了引入icon 出现错误,现在总结一下问题: 主要碰到两个错误 1:路径错误,报错找不到modules, 2:路径错误,但是没有报错,只是显示小方块(也就是没有显示 ...

  8. 红色小方块单击爆炸式展开的菜单代码

    代码简介:不知道能给它起个什么名字,就叫做"爆炸式菜单"吧,因为它的效果很像是爆炸开了,鼠标点击后会以一个五角星为基准单元依次展开,可以有多次,像链式表一样. 代码内容: < ...

  9. 解决sublime3的标签页乱码(小方块)

    在使用sublime3打开一个中文名的文件时,有可能显示的是小方块.这种情况很有可能在你新买的电脑上发生,这是因为现在的电脑的DPI比较高,即使你安装了ConvertToUTF8也还是不会正确显示文件 ...

最新文章

  1. JUC锁-LockSupport(四)
  2. Objective-C中变量采用@property的各个属性值的含义
  3. 人工智能相关领域的国际顶会介绍
  4. c51随机数不重复_单片机定时器设置不重复随机数
  5. TDtree冲刺第四天
  6. Assimp(LearnOpenGL With Qt)
  7. 全国24省50万亿元投资在路上:后疫情时代碰撞新基建,AI难再“一招鲜”
  8. CTFshow——萌新记忆
  9. 在linux前台和后台运行程序
  10. MCE | 分子伴侣介导的自噬
  11. numpy中数据不以科学记数法显示
  12. 使用STM32F103采集Si7021温湿度传感器数据
  13. vue适配PC端屏幕自适应
  14. datawhale课程《transformers入门》笔记6:文本分类、超参搜索
  15. 8-9(CCPD车牌数据集)
  16. 15、TWS API和IB中的期权相关的操作
  17. 【^ 亦或运算符】 实现【变量值交换】和 【数组反转】
  18. 倒计时2天 校园行|AI TIME “未来杯” 走进浙江大学
  19. 用Java实现数据查询
  20. 《炬丰科技-半导体工艺》--技术资料合集十

热门文章

  1. mongodb 数字 _id_MongoDB学习笔记MongoDB简介及数据类型
  2. shell python脚本语言_python脚本里使用shell语句
  3. 初学C语言,你的“行囊”需要准备什么呢?
  4. 手把手教你研发属于自己的智能无人机
  5. JAVA子类是球父类是圆_java的父类和子类,这是矛盾...
  6. 中立时滞matlab,中立型时滞系统的稳定性改进判据
  7. python转换函数使用_python进制转换函数代码的使用
  8. Hibernate视频学习笔记(3)常用映射标签及属性
  9. python系统学习:函数积累(持续更新)
  10. HDU2167 Pebbles(状压DP)