2011-05-14 71 views
0

我正在做一个简单的游戏,但我需要它每秒钟绘制二十次图像。我打算使用多个UIImageView,但我很快意识到它不起作用。那么,如何绘制图像,然后在更新计时器触发时“擦除”它们?我试图使用下面的代码,但没有出现。如何将UIImage“绘制”到视图中?

- (void) update:(NSTimer*) timer { 
    UIimage *someImage; 
    someImage = [UIImage imageNamed:@"car.png"]; 
    [someImage drawAtPoint:thePoint]; 
} 

我试图让点同时NSPoint和CGRect,但没有出现。现在我该怎么做?注意:thePoint是在我的.h文件中声明的。它目前是NSPoint,我认为它正在正确使用。

+0

我不熟悉在这种情况下使用图像视图,但你不能将图像设置为一个imageView实例吗?当更新发生时,您可以调用'imageView.image = nil;'然后用'imageView.image = newImage;'设置新图像。如果图像尺寸不是很大(迫使imageView进行缩放),理论上应该能够及时设置图像 – justin 2011-05-14 06:38:50

+0

如果您正在尝试执行的动画(以给定帧速率播放多个帧),这是不是你应该这样做的方式。改用'yourView.animationImages = animationFramesArray; yourView.animationDuration = 10; [yourView startAnimating];' – 2011-05-14 06:52:17

+0

@mindnoise它不是一个动画,但谢谢你告诉我该怎么做。当我开始为我计划制作的另一个应用中的某些内容添加动画时,这将非常有用。 – Justin 2011-05-15 01:00:56

回答

2

这真的是你的代码吗?这几乎毫无意义。你已经创建了一个局部变量someImage,它没有创建一个指向它的对象,然后试图调用这个非对象上的方法,这个对象不存在于你正在使用的类中UIImage没有setImage:)。它几乎保证会崩溃,如果它不立即,那么它很可能会导致后面的一个,因为它会破坏内存 - 像这样在堆栈上创建的变量不会初始化为0(nil),因为它会如果它是一个伊娃,并试图发送消息给一些随机地址是一个坏主意。为什么你会尝试传递一个CGRect到一个方法,甚至说它的名字它需要一点?最后,你期望这个被绘制在哪里?您需要一个绘图上下文(通常由您的标题中提到的视图提供,但不是问题)进行绘制。

请查看图纸指南的"Images"章节,如果没有别的。

+0

嗯... someImage意味着我只是使用一个图像...它不是一个UIImage。在我的真实代码中,我使用了[UIImage imageNamed:@“car.png”]。 – Justin 2011-05-14 13:17:40

+0

那么为什么你的问题状态“我试图使用下面的代码:”?!请发布您的_real_代码。如果您不告诉我们您实际在做什么,我们如何帮助您? – 2011-05-14 16:32:37

+0

我以为我说得很清楚。我将编辑我的代码以显示我所做的。感谢您提出这一点。 – Justin 2011-05-15 00:57:01

1

NSPoint适用于Mac,而CGRect就是矩形而不是点。你在找什么是CGPoint。尝试这样的事情:

-(void)update:(NSTimer*) timer { 
    CGPoint thePoint = CGPointMake(0, 0); 
    UIImage *someImage = [UIImage imageNamed:@"car.png"]; 
    [someImage drawAtPoint:thePoint]; 
} 
+0

这是一个很好的**点** ,但仍然需要一个绘图环境。 – 2011-05-15 03:19:24

+0

是的,抱歉,我没有让这个清醒。除了你自己以外,我还试图说明这一点*(咳嗽)*。 – 2011-05-15 03:23:33