1

我想实现缩放到我需要对话框的大小的对话框边框。也许这种东西有一个更好的更传统的名称。如果有,如果有人会编辑标题,那就太好了。

无论如何,我想这样做,这样我就可以拥有任何大小的对话框,而不会出现将边框艺术缩放到小、大或古怪的不成比例尺寸所带来的视觉伪影。我对如何做到这一点有一些想法,但不确定哪个更适合 iphone。我有几个问题。

1) 我应该创建一个包含视图对象,该对象基本上重载其 drawRect 方法并在调用该方法时将图像绘制到它们应该处于适当比例的位置,还是应该维护一个仅包含 8 个 UIImageViews 的包含视图对象?如果我需要像在动画中那样主动缩放生成的对话框类,我怀疑后一种方法将不起作用。

1b)如果重载drawRect是要走的路,是否有人有一些示例代码或指向演示直接从drawRect()绘制图像的示例的链接?

2)创建通常更好吗

a) 一个 3 x 3 的图像,其中的片段位于图像的相应 1x1 网格中?如果是这样,在drawRect中从这个图像的一部分绘制到我的目标视图上是否简单(如果前一个假设是正确的,我应该使用drawRect)?

b) 分别在 8 个不同的文件中?

更新:澄清一下,这个想法是采用任何自定义的边框艺术,并能够拉伸第 2、第 4、第 6 和第 8 个单元格(在 3x3 单元格网格中)以仅使用这些资产形成任意大小的边框。仅拉伸普通图像会导致角落失真,因此我想根据需要拉伸那些偶数编号的单元格并粘贴角落,以免失真。我以前见过这样做,所以认为它可能是一个标准的东西,并且有一个标准的命名,而不是我所说的。

无论如何,我被告知将 8 个 UIImageViews 添加到容器中不会像在 drawRect 中动态绘制 UIImages 那样有效,因此在对上下文应用必要的转换以平移和缩放 Y 之后使用 CGContextDrawImage() 采用这种方法。因为此函数从图像的左下角绘制到左上角的 UIView,图像是颠倒的,没有 Y 轴反转。我注意到使用像 drawAtPoint 这样的 UIImage 函数的建议同样有效,但对于反转,因为 UIImage 的绘制方向与 UIViews 相同。我将继续执行前者,看看效果如何,但还有另一个问题。

有人会碰巧知道这些方法中哪一种更有效、更快等吗?

4

2 回答 2

2

我不确定我是否遵循,但这是我最好的答案......

使用 drawRect: 或将单个 UIImageViews 添加到父视图完全取决于您。UIImageView 免费为您提供了一些封装的功能,但就外观而言,它们是相同的。

如果你确实想走 drawRect 路线,你只需要使用 UIImage 的 drawAtPoint: 方法。计算你想要它在哪里,然后画出来。您可以根据父视图的尺寸计算您的分数。

至于缩放,如果不缩放它们就不可能调整这些图像的大小,所以我会提前计划并使您的原件与您预期的一样大或更大。

希望有一点帮助?

干杯

于 2010-05-18T23:23:59.607 回答
1

如果你想要一个对话框的边框,假设这个盒子是一个 UIView(或子类),那么设置图层的边框属性,让系统为你绘制边框。

#import <QuartzCore/QuartzCore.h> 
// ... 

view.layer.borderWidth = 2;
view.layer.borderColor = [UIColor whiteColor].CGColor; 
view.layer.cornerRadius = 0;  // 0=square corners, >0 for rounded
于 2010-05-18T23:31:43.520 回答