在_labelView
之后添加四个-addLabel
后,我希望_labelView
随机移动所有-moveLabel
。
LabelView是UIView的子类。
但是在这个代码的情况下,我只能移动一个_labelView
,我最后添加了。{
看NSLog(@"%d",_viewsArray.count),输出" 1"。
如何修复它以移动所有_labelView
?
@property (nonatomic, strong) LabelView* labelView;
@property (nonatomic, strong) NSMutableArray* viewsArray;
- (void)addLabel
{
_viewsArray = [[NSMutableArray alloc]init];
_labelView = [[LabelView alloc]initWithFrame:CGRectMake(0, 0, 200, 25)];
[_viewsArray addObject:_labelView];
for (_labelView in _viewsArray){
[self.view addSubview:_labelView];
}
NSLog(@"%d", _viewsArray.count);
}
- (void)moveLabel
{
int n;
CGPoint labelFrame;
for (_labelView in _viewsArray)
{
n = arc4random() % 4;
switch (n) {
case 0: labelFrame = CGPointMake(30, 50);
break;
case 1: labelFrame = CGPointMake(30, 100);
break;
case 2: labelFrame = CGPointMake(30, 150);
break;
case 3: labelFrame = CGPointMake(30, 200);
break;
default:
break;
}
[UIView animateWithDuration:0.5f delay:0.0f options:UIViewAnimationCurveEaseIn
animations:^{_labelView.center = labelFrame;} completion:^(BOOL finished){}];
}
NSLog(@"%d", _viewsArray.count);
}
答案 0 :(得分:4)
在addLabel方法中,每次添加新标签时都会分配NSMutableArray:
_viewsArray = [[NSMutableArray alloc]init];
所以你在这个数组中只有一个对象。 简单地将这一行移动到viewDidLoad方法(或者如果它不是视图控制器子类的某些init方法),它应该修复它。
答案 1 :(得分:0)
每次调用addView时都要分配一个新的_viewsArray! 你应该在viewDidLoad或其他东西分配数组,然后只使用它
答案 2 :(得分:0)
最简单的修复......
- (void)addLabel {
if (_viewsArray == nil) {
_viewsArray = [[NSMutableArray alloc] init];
}