我看到一些类似拼图的应用程序。它首先要求选择一个图像,然后将它们切片并随机放入4x4或5x5正方形。一个正方形将为空,用户可以通过将图像滑动到空插槽来重新排列它们。
我知道如何滑动图像。但主要任务是如何将它们变成更小的图像? 有可能吗?
答案 0 :(得分:0)
Matt Long在他的文章Subduing CATiledLayer
中对此进行了讨论。
答案 1 :(得分:0)
不确定这是否是最有效的方法,但我认为它应该有效。
将图像加载到希望切片大小的UIImageView中,因此我们以480x320图像为例。让我们把它切成9个部分,一个3x3网格。这将使每件160x106(粗略地,320不均匀地除以3)
因此,创建尺寸为160x106的UIImageView,将image
属性设置为您的完整尺寸图像。并将图片视图的contentMode
设置为UIViewContentModeScaleAspectFill
,以便剪切不在视图中的区域。我没有尝试过,但我认为这会给你网格的左上角,位置1,1。
现在,您可以根据内存效率/性能做出选择,您必须测试哪种方式最佳。
选项1
继续为每个切片执行此操作,但设置UIImage的框架,以便显示图像的正确部分,并剪切其余部分。因此,对于位置2,2,您的第1,2位的框架看起来像CGRectMake(106, 0, 106, 160)
,它将是CGRectMake(106*2, 160, 106, 160)
,依此类推。
这导致整个图像被加载到内存中9次,这可能是也可能不是问题。您将不得不对内存使用情况进行一些分析。
选项2
在UIImageView中创建“切片”后,将该上下文保存为文件,稍后将加载到相应的UIImageViews中。
以下代码演示了将UIView的上下文保存到UIImage的一种方法。
UIGraphicsBeginImageContext(yourView.frame.size);
[[yourView layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage *imageOfView = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
然后,您可以使用适当的名称将此UIImage保存到磁盘,以便稍后加载到相应的切片中。