各ライトの座標を持つCGRectの配列を持ってみませんか。次に、1つのUIViewを四角形の周りに移動するか、一度に複数のUIViewを照明する場合は、いくつかのUIViewを移動します。
編集-------一緒にスローされたいくつかの簡単なコード。
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
rects = [[NSMutableArray alloc] init];
lit = [[NSMutableArray alloc] init];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(20, 20, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(60, 20, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(100, 20, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(140, 20, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(180, 20, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(220, 20, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(260, 20, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(20, 60, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(60, 60, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(100, 60, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(140, 60, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(180, 60, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(220, 60, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(260, 60, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(20, 100, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(60, 100, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(100, 100, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(140, 100, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(180, 100, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(220, 100, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(260, 100, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(20, 140, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(60, 140, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(100, 140, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(140, 140, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(180, 140, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(220, 140, 20, 20)]];
[rects addObject:[NSValue valueWithCGRect:CGRectMake(260, 140, 20, 20)]];
}
- (void)viewDidAppear:(BOOL)animated
{
[self lightRandomLight];
[self performSelector:@selector(switchOffRandomLight) withObject:nil afterDelay:1.0];
}
- (void)lightRandomLight
{
BOOL escape = NO;
int rand;
while (!escape) {
BOOL alreadyLit = NO;
rand = arc4random() % [rects count];
// Check if already lit
for (UIView *view in lit) {
CGRect litRect = view.frame;
CGRect ranRect = [[rects objectAtIndex:rand] CGRectValue];
if (CGRectContainsRect(litRect, ranRect)) {
alreadyLit = YES;
}
}
if (!alreadyLit) {
UIView *light = [[UIView alloc] initWithFrame:[[rects objectAtIndex:rand] CGRectValue]];
light.backgroundColor = [UIColor yellowColor];
[lit addObject:light];
[self.view addSubview:light];
escape = YES;
}
}
[self performSelector:@selector(lightRandomLight) withObject:nil afterDelay:0.2];
}
- (void)switchOffRandomLight
{
int rand = arc4random() % [lit count];
UIView *light = [lit objectAtIndex:rand];
[lit removeObject:light];
[light removeFromSuperview];
[self performSelector:@selector(switchOffRandomLight) withObject:nil afterDelay:0.5];
}