这是我想做的事http://www.youtube.com/watch?v=rD3MTTPaK98 我已经完成了图像出现在随机位置的部分,但随后它变得很难。我不想使用UIKit Animations,因为我使用一个定时器来动画像:imageView.center = CGPointMake(imageView.center.x + X,imageView.center.y + Y);但是我不能一次动画多个图像我不知道为什么?我该如何解决呢
这是我的代码:
-(void) onTimer {
UIImage * image = [UIImage imageNamed:@"abouffer_03.png"];
imageView = [[UIImageView alloc] initWithImage:image];
[imageView setCenter:[self randomPointSquare]];
[[self view] addSubview:imageView];
[imageView release];
ix=imageView.center.x;
iy=imageView.center.y;
X=(240-ix)/230;
Y=(160-iy)/230;
coteA=(240-ix);
coteB=(160-iy);
angleDeRotation=atan(coteB/coteA);
if(ix>250||0>iy>320){
imageView.transform = CGAffineTransformMakeRotation(angleDeRotation+3.14);
}
else{
imageView.transform = CGAffineTransformMakeRotation(angleDeRotation);
}
}
-(void)onTimer2{
imageView.center = CGPointMake(imageView.center.x + X, imageView.center.y + Y);
label.text= [NSString stringWithFormat:@"%d", count];
答案 0 :(得分:1)
由于您未在此处发布所有代码,因此我必须猜测。
您是否在onTimer
中创建了imageView,然后尝试在onTimer2
中移动“他们”?
如果是,那么
因为您总是将imageView
var设置为您在onTimer
方法中创建的最新imageView,所以当您尝试在imageView
方法中移动onTimer2
时,您只是移动你创建的最新版本。
为了移动您创建的每个imageView,您最好在for loop
方法中使用onTimer2
。
另外,您最好使NSMutableArray保存所有的imageView,或者您可以使用imageView.tag
再次获取imageView,而无需创建NSMutableArray并稍后将其释放。
以下是如何使用NSMutableArray保存和读取所有imageView的示例:
将其添加到班级的.h
文件中:
NSMutableArray *views;
NSMutableArray *XArray;
NSMutableArray *YArray;
修改您的.m
文件:
...
//Create an array some where in your class:
views = [[NSMutableArray array] retain];
XArray = [[NSMutableArray array] retain];
YArray = [[NSMutableArray array] retain];
...
- (void)onTimer {
[XArray addObject:[NSNumber numberWithFloat:(240.0f - ix)/230.0f]];
[YArray addObject:[NSNumber numberWithFloat:(160.0f - iy)/230.0f]];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];
[self.view addSubview:imageView];
[views addObject:imageView];
[imageView release];
}
//Read:
- (void)onTimer2 {
for (NSUInteger i = 0; i < [views count]; i++) {
UIImageView *imageView = [views objectAtIndex:i];
CGFloat X = [[XArray objectAtIndex:i] floatValue];
CGFloat Y = [[YArray objectAtIndex:i] floatValue];
CGPointMake(imageView.center.x + X, imageView.center.y + Y);
}
}
- (void)dealloc {
...
[views release];
[XArray release];
[YArray release];
...
}
或者您可以像这样使用imageView.tag
:
将其添加到班级的.h
文件中:
NSInteger imageViewCount;
修改您的.m
文件:
...
#define kImageViewFirstTag 10000
...
...
//reset the count some where in your class if needed
imageViewCount = 0;
...
- (void)onTimer {
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];
[self.view addSubview:imageView];
[views addObject:imageView];
imageView.tag = kImageViewFirstTag + imageViewCount;
imageViewCount ++;
[imageView release];
}
//Read:
- (void)onTimer2 {
for (NSUInteger i = 0; i < imageViewCount; i++) {
UIImageView *imageView = (UIImageView *)[self.view viewWithTag:kImageViewFirstTag + i];
CGPointMake(imageView.center.x + X, imageView.center.y + Y);
}
}
这两个代码是由大脑编译的,如果有任何错误,请纠正我。
建议使用第一种方法,因为它具有更好的性能。
答案 1 :(得分:0)
每次调用imageView
时,您都会覆盖您的ivar -onTimer
。您应该将每个创建的imageview放在一个数组或一个集合中,或者您可以根据您的视图结构迭代self.view.subviews
。