回收,循环利用

使用两个定时器,一个用于找对象,另一个使对象做下落动画。一般尽量少使用定时器,因为容易造成线程卡死。耗内存。


//回收

//创建子弹

//1.创建存储子弹的数组(初始化数组要写在for循环外面)

// 100未使用状态。101使用

myBulletArray = [[NSMutableArray alloc] initWithCapacity:0];

for(inti = 0; i < 20; i ++) {

UIImageView*_myBullet = [[UIImageView alloc] initWithFrame:CGRectMake(_MyPlane1.frame.origin.x+25,-10, 5, 10)];

_myBullet.image= [UIImage imageNamed:@"zidan.png"];

_myBullet.tag= 100;

[self.viewa ddSubview:_myBullet];

//放进数组里

[myBulletArray addObject:_myBullet];

}

- (void)startTimerAction {

///find的定时器

[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(findTimer) userInfo:nil repeats:YES];

//down的定时器

[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(DownTimer) userInfo:nil repeats:YES];

}

#pragma mark ====找的方法

- (void)findTimer {

//遍历子弹数组100未使用状态。101使用

for(UIImageView *_myBullet in myBulletArray) {

//判断未使用状态

if(_myBullet.tag == 100) {

//拉到飞机的顶端

_myBullet.center=CGPointMake(_MyPlane1.center.x,_MyPlane1.center.y-30);

//改变状态(在使用)

_myBullet.tag= 101;

//跳出循环

break;

}

}

}

#pragma mark ==== 移动的方法

- (void)DownTimer {

for(UIImageView *_myBullet in myBulletArray) {

//找到被拉到屏幕上的子弹

if(_myBullet.tag == 101) {

//子弹上升

_myBullet.center=CGPointMake(_myBullet.center.x, _myBullet.center.y-3);

//判断是否出屏幕

if(_myBullet.center.y<= 0) {

//修改为未使用状态

_myBullet.tag= 100;

_myBullet.frame=CGRectMake(0,-40, 5,10);

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容