保存到桌面加入收藏设为首页
IOS开发
当前位置:首页 > IOS开发

循环逻辑。让我逻辑滞空的小题目-安度博客

时间:2019-02-04 14:57:39   作者:   来源:   阅读:101   评论:0
内容摘要:昨晚遇到了一个让我逻辑滞空的小题目:让storyBoard中有一个button按钮,按钮图片可以随便设定,要求点击一下按钮,按钮就要向右下角45°方向移动。要就碰到四周时,button就要向个方向的90°方向移动。以此循环,碰到四周就要求转换方向。当时逻辑情况怎么......
  • 昨晚遇到了一个让我逻辑滞空的小题目:

    让storyBoard中有一个button按钮,按钮图片可以随便设定,要求点击一下按钮,按钮就要向右下角45°方向移动。要就碰到四周时,button就要向个方向的90°方向移动。以此循环,碰到四周就要求转换方向。

    当时逻辑情况怎么也弄不清楚,总觉的少了好多情况。静下心来,我们来研究一下。

    定义边界属性(其实也可以定义局部变量)

    //button移动右边界范围x@property (nonatomic assign) NSInteger rightRangeX;//button移动左边界范围x@property (nonatomic assign) NSInteger leftRangeX;//button移动下边界范围y@property (nonatomic assign) NSInteger bottomRangeY;//button移动上边界范围y@property (nonatomic assign) NSInteger heightRangeY;

     设定两个BOOL值:用来判断是否向左,或向上(也可以向下,或向右)

    //判断button是否向左@property (nonatomicassign) BOOL isleft;//判断button是否向上@property (nonatomicassign) BOOL isup;

     在viewDidLoad中,让BOOL值为NO,因为题目要求是右下角嘛,要跟着题目走..

    - (void)viewDidLoad { [super viewDidLoad]; self.isleft = NO; self.isup = NO; // Do any additional setup after loading the view typically from a nib.}

     拖一个button方法:moveBtnClick: 

    - (IBAction)moveBtnClick:(UIButton *)sender { ... }

     方法中获取了屏幕的大小、设置了每次移动的距离(我假象为speed)、button在各个边的临界范围

     //获取屏幕大小 CGRect mainRect = [[UIScreen mainScreen] bounds]; //设置移动距离值 NSInteger speed = 10; //求出button在个边的临界范围 CGRect tempframe = self.btnClick.frame; self.rightRangeX = mainRect.size.width - 60; self.bottomRangeY = mainRect.size.height - 60; self.leftRangeX = 0; self.heightRangeY = 0;(由于我在storyBoard中直接就设定了60 * 60 的大小,所以在求范围的时候就用了 “魔鬼数字 60”)

     主逻辑:起初,我在纸上写了不下10中情况,我考虑了起初button的各个位置的情况,在if语句中嵌套了无数个if语句,结果最后把自己锁死了进去。其实无非就上下左右,先考虑左右,在左右中考虑上下。仅此而已。

     if (self.isleft) { tempframe.origin.x -= speed; if (tempframe.origin.x < self.leftRangeX) { self.isleft = NO; tempframe.origin.y += speed; } if (self.isup) { tempframe.origin.y -= speed; if (tempframe.origin.y < self.heightRangeY) { self.isup = NO; } } else { tempframe.origin.y += speed; if (tempframe.origin.y > self.bottomRangeY) { self.isup = YES; } } } else { tempframe.origin.x += speed; if (tempframe.origin.x > self.rightRangeX) { tempframe.origin.y -= speed; self.isleft = YES; } if (self.isup) { tempframe.origin.y -= speed; if (tempframe.origin.y < self.heightRangeY) { self.isup = NO; } } else { tempframe.origin.y +=speed; if (tempframe.origin.y > self.bottomRangeY) { self.isup = YES; } } }
    一道简单的逻辑分析问题,我却把自己锁死进去,给自己一个一个警告吧,遇到逻辑文字,静下心来,从全局入手,不要走一步分析一步,总也会有意想不到的问题发生,等走到了最后,发现自己已经走不出自己的逻辑了,挠头吧、删了重写吧、心里面乱了,就怎么都不会有任何新的进展了。 静下心来,从总体入手,搭建出来打的框架,往框架里面添加所需要的逻辑。到头来,读一下自己写的代码,真简单。 这是一道简单的逻辑问题,以后会遇到各种各样的复杂逻辑。静下心,搭出框架,走的每一步自己都知道在做什么,这样才能写出一套完美的逻辑。

    上全代码: 

     1 #import &#39;ViewController.h&#39; 2 3 @interface ViewController () 4 5 @property (weak nonatomic) IBOutlet UIButton *btnClick; 6 //button移动右边界范围x 7 @property (nonatomic assign) NSInteger rightRangeX; 8 9 //button移动左边界范围x 10 @property (nonatomic assign) NSInteger leftRangeX; 11 12 //button移动下边界范围y 13 @property (nonatomic assign) NSInteger bottomRangeY; 14 15 //button移动上边界范围y 16 @property (nonatomic assign) NSInteger heightRangeY; 17 18 //判断button是否向左 19 @property (nonatomicassign) BOOL isleft; 20 //判断button是否向上 21 @property (nonatomicassign) BOOL isup; 22 23 @end 24 25 @implementation ViewController 26 27 - (void)viewDidLoad { 28 [super viewDidLoad]; 29 self.isleft = NO; 30 self.isup = NO; 31 // Do any additional setup after loading the view typically from a nib. 32 } 33 34 35 - (void)didReceiveMemoryWarning { 36 [super didReceiveMemoryWarning]; 37 // Dispose of any resources that can be recreated. 38 } 39 - (IBAction)moveBtnClick:(UIButton *)sender 40 { 41 //获取屏幕大小 42 CGRect mainRect = [[UIScreen mainScreen] bounds]; 43 44 //设置移动距离值 45 NSInteger speed = 10; 46 47 //求出button在个边的临界范围 48 CGRect tempframe = self.btnClick.frame; 49 50 self.rightRangeX = mainRect.size.width - 60; 51 self.bottomRangeY = mainRect.size.height - 60; 52 self.leftRangeX = 0; 53 self.heightRangeY = 0; 54 55 if (self.isleft) { 56 tempframe.origin.x -= speed; 57 if (tempframe.origin.x < self.leftRangeX) 58 { 59 self.isleft = NO; 60 tempframe.origin.y += speed; 61 } 62 if (self.isup) 63 { 64 tempframe.origin.y -= speed; 65 if (tempframe.origin.y < self.heightRangeY) 66 { 67 self.isup = NO; 68 } 69 } 70 else 71 { 72 tempframe.origin.y += speed; 73 if (tempframe.origin.y > self.bottomRangeY) 74 { 75 self.isup = YES; 76 } 77 } 78 } 79 else 80 { 81 tempframe.origin.x += speed; 82 if (tempframe.origin.x > self.rightRangeX) 83 { 84 tempframe.origin.y -= speed; 85 self.isleft = YES; 86 } 87 if (self.isup) 88 { 89 tempframe.origin.y -= speed; 90 if (tempframe.origin.y < self.heightRangeY) 91 { 92 self.isup = NO; 93 } 94 } 95 else 96 { 97 tempframe.origin.y +=speed; 98 if (tempframe.origin.y > self.bottomRangeY) 99 {100 self.isup = YES;101 }102 }103 }104 sender.frame = tempframe;105 }106 107 108 @end

    仅此。


本站所有站内信息仅供娱乐参考,不作任何商业用途,不以营利为目的,专注分享快乐,欢迎收藏本站!
所有信息均来自:百度一下 (威尼斯人官网)