同时实现可拉伸和图案的UIImage

7
我想编写一个货架,不想考虑在旋转和根据屏幕大小(iPad/iPhone)更改背景图像时调整大小。是否可以创建一张图片,水平拉伸但垂直重复呢?
到目前为止,我只发现了[UIColor colorWithPatternImage:][UIImage strechableImageWithLeftCapWidth:topCapHeight:]或新的[UIImage resizableImageWithCapInsets:]。但我没能让它们一起工作,显然。
希望这张插图可以帮助理解我的问题: Illustration 您有什么想法可以实现上述功能,使其适用于不同的尺寸和方向的单个图像?谢谢!

只是出于好奇,您使用[UIColor colorWithPatternImage: [UIImage resizableImage...]]会得到什么样的结果? - Patrick Perini
图像不会被拉伸或调整大小,只是在x和y方向上重复。 - denbec
杂志下面的阴影很漂亮 :) 是手绘的还是使用了 CA? - Shmidt
3个回答

3

[UIColor colorWithPatternImage:]在处理大量行时可能占用极高的内存。我最终创建了一个比整个视图多一行的单个图像视图,使用[UIColor colorWithPatternImage:],然后在视图即将滚动离开屏幕时根据需要将该视图上下移动一行。由于仅在行边界移动视图,因此性能比我预期的要好得多。

但更好的选择是使用[UIColor colorWithPatternImage:]创建一组单独的UIImageViews池,并将它们平铺,类似于UITableView对表视图单元格所做的操作。

苹果提供了示例代码,演示了该技术在ScrollView套件示例项目和WWDC 2010的Scroll Views视频中的应用。


3

我也需要同时从图像设置UIView的背景并更改其大小。我的做法是:

  1. 在视图大小的框架内创建图像
  2. 使用[UIColor colorWithPatternImage:(UIImage*)]设置视图背景

以下是代码:

UIGraphicsBeginImageContext(self.followView.frame.size);
[[UIImage imageNamed:@"background_content.png"] drawInRect:self.followView.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIColor *bgColor = [UIColor colorWithPatternImage:image];

[followView setBackgroundColor:bgColor];

0
为什么不使用一个可伸缩的货架图片,然后将其设置为表格视图上每个单元格的背景呢?
编辑:
我对 AQGridView 的了解有限,但听起来你可以访问每个单独的“网格块”。
尝试每行使用三张图片: - 用于显示货架左侧角的最左边网格块的图像 - 应用于除第一个和最后一个网格块以外的所有网格块的货架中心部分的图像 - 用于显示货架右侧角的最右边网格块的图像。
此外,你应该在问题中提到你正在使用 AQGridView,这样其他用户就不会认为你正在使用 UITableView。

因为我正在使用网格单元格 AQGridView,而不是行... :( - denbec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接