Objective c xcode和sprite工作表,当一张工作表中存在多个图像时如何裁剪图像
我知道这是通过web编程实现的,是否也可以通过xcode和obj-c实现?我有一个带有两个按钮实例(正常和单击)的精灵表。我知道我可以在obj-c中使用单击功能,但是我可以导入一个精灵表并裁剪精灵表的一部分(与网站一样)以裁剪一个精灵表中所需的图像部分吗?如果需要,需要哪些功能?您有什么可以给我指的例子吗?您可以使用Objective c xcode和sprite工作表,当一张工作表中存在多个图像时如何裁剪图像,objective-c,cocoa,sprite,Objective C,Cocoa,Sprite,我知道这是通过web编程实现的,是否也可以通过xcode和obj-c实现?我有一个带有两个按钮实例(正常和单击)的精灵表。我知道我可以在obj-c中使用单击功能,但是我可以导入一个精灵表并裁剪精灵表的一部分(与网站一样)以裁剪一个精灵表中所需的图像部分吗?如果需要,需要哪些功能?您有什么可以给我指的例子吗?您可以使用CALayer实现这一点:它比UIImageView更轻,而且使用非常简单。这个想法是基于一个正在工作的项目的例子 // "sprites.png" is a 192x128
CALayer
实现这一点:它比UIImageView
更轻,而且使用非常简单。这个想法是基于一个正在工作的项目的例子
// "sprites.png" is a 192x128 picture containing two rows of three 64x64 sprites each
NSString *path = [[NSBundle mainBundle] pathForResource:@"sprites.png" ofType:nil];
CGImageRef img = [UIImage imageWithContentsOfFile:path].CGImage;
imgLayer = [CALayer layer];
imgLayer.contents = (__bridge id)img;
// Frame defines the position of your sprite inside your view
imgLayer.frame = CGRectMake(horOffset, verOffset, 64, 64);
imgLayer.bounds = CGRectMake(0, 0, 64, 64); // The size of an individual sprite
// Pick the sprite from the top row, left column
imgLayer.contentsRect = CGRectMake(0, 0, 1.0/3.0, 1.0/2.0);
// Top row, middle column
// imgLayer.contentsRect = CGRectMake(1.0/3, 0, 1.0/3.0, 1.0/2.0);
// Top row, right column
// imgLayer.contentsRect = CGRectMake(2.0/3, 0, 1.0/3.0, 1.0/2.0);
// Bottom row, left column
// imgLayer.contentsRect = CGRectMake(0, 1.0/2, 1.0/3.0, 1.0/2.0);
// Bottom row, middle column
// imgLayer.contentsRect = CGRectMake(1.0/3, 1.0/2, 1.0/3.0, 1.0/2.0);
// Bottom row, right column
// imgLayer.contentsRect = CGRectMake(2.0/3, 1.0/2, 1.0/3.0, 1.0/2.0);
[self.layer addSublayer:imgLayer];
您打算如何显示您的精灵?您是否将它们放在
UIImageView
,CALayer
,或其他什么地方?UIImageView,但如果可能有更好的解决方案,您可以接受其他想法。先生,您使用此代码给我带来了很多痛苦imgLayer.contentsRect
不应该是64,64
它应该是1,1
。。您的示例链接中的代码在仔细检查后仍然有效。@Lémuffinnm非常感谢您的宝贵意见!仔细检查后,我发现我复制/粘贴了两次内容rect
——一次在边界的位置,一次在它的正确位置。这个问题现在已经解决了。谢谢谢谢,我让它工作了,但我必须说,哇!这确实很难让我理解。在我看来,在边界中指定精灵大小会更自然,就像我们现在这样,让内容反射采取CGSize
,这将是x,y位置。当前的工作方式是在宽度和高度属性中输入一个值,该值与点或像素的比例为0-1。这有助于解释为什么contentsRect
的范围为0-1。