【问题标题】:How to "draw" UIImages into a view?如何将 UIImages “绘制”到视图中?
【发布时间】:2011-05-14 06:30:04
【问题描述】:

我正在制作一个简单的游戏,但我需要它每秒绘制 20 次图像。我打算使用多个 UIImageViews,但我很快意识到它不起作用。那么,如何绘制图像,然后在更新计时器触发时“擦除”它们?我尝试使用以下代码,但没有任何显示。

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

我尝试将 thePoint 设置为 NSPoint 和 CGRect,但没有任何结果。现在我该怎么做?注意:thePoint 在我的 .h 文件中声明。它目前是一个 NSPoint,我认为它正在被正确使用。

【问题讨论】:

  • 我不太熟悉在这种情况下使用图像视图,但是您不能将图像设置到一个 imageView 实例中吗?当更新发生时,您可以调用imageView.image = nil;,然后使用imageView.image = newImage; 设置新图像。如果图片尺寸不大(强制imageView缩放),理论上应该可以及时设置图片
  • 如果它是你想要做的动画(以给定的帧速率播放几帧),这不是你应该做的。改用yourView.animationImages = animationFramesArray; yourView.animationDuration = 10; [yourView startAnimating];
  • @mindnoise 这不是动画,但谢谢你告诉我怎么做。当我开始在我计划制作的另一个应用程序中添加动画时,这将非常有用。
  • 这种带有图像视图的实现在性能方面可能不合适。我会选择退出 CALayer 子类,并在 drawInContext 方法中将图像直接绘制到上下文中。这样做的一个原因是加载图像数据并将图像直接绘制到上下文中可以使您免于隐藏在 UIImage 和 UIImageView 后面的讨厌的功能。

标签: iphone objective-c cocoa-touch uiimage


【解决方案1】:

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

如果没有其他内容,请查看绘图指南的"Images" 章节。

【讨论】:

  • 嗯...someImage 意味着我将只使用图像...它实际上不是 UIImage。在我的真实代码中,我使用了 [UIImage imageNamed:@"car.png"]。
  • 那为什么你的问题是“我尝试使用以下代码:”?!请张贴您的真实代码。如果您不告诉我们您的实际操作,我们如何为您提供帮助?
  • 我以为我说清楚了。我将编辑我的代码以显示我做了什么。感谢您提出这一点。
  • @Justin,我意识到我在这篇文章中可能听起来有点疯狂,我很抱歉,但是这个更新的代码仍然没有意义UIImage 没有方法 称为setImage: 在尝试构建时没有看到警告吗?
  • 对不起;我想我犯了一个错误。我会解决这个问题,然后再次尝试运行它。
【解决方案2】:

NSPoint 用于 Mac,CGRect 是一个矩形而不是一个点。您正在寻找的是CGPoint。试试这样的:

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

【讨论】:

  • 这是一个很好的 ,但仍然需要一个绘图上下文。
  • 是的,对不起,我没有说清楚。除了您的观点之外,我还试图说明这一点(咳嗽)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多