【问题标题】:Image not resizing using CapInsets correctly图片未正确使用 CapInsets 调整大小
【发布时间】:2013-03-30 18:39:42
【问题描述】:

我已经创建了一个如下的 singup 按钮:

signupButton = [[UIButton alloc] initWithFrame:CGRectMake(10,(facebookLoginButton.bounds.size.height + 40),300,50)];
signupButton.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
UIImage *signupButtonImage = [[UIImage imageNamed:@"Signup"]
                              resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)];
[signupButton setBackgroundImage:signupButtonImage forState:UIControlStateNormal];

上述按钮的框架为 300x50。我创建了一个 22(w)x100(h)px 的图像(用于 Retina 设备)。

图像为 22 像素,其中包括 10px 圆角和 2px 用于可重复的中间部分。

我尝试按照上述代码实现拉伸,插入为 0,10,0,10,但这并没有按预期拉伸。

有人能解释一下插图应该是什么吗?另外如何解决这些问题,我找不到任何有关如何实际计算插图应该是什么的有用信息?我已阅读有关此内容的 Apple 文档,但我不明白如何解决这些问题。

【问题讨论】:

  • 将 cap insets 设置为非视网膜图像,在本例中为 0,5,0,5。

标签: iphone ios objective-c ios5 uiimage


【解决方案1】:

您的图像大小为22x100,但它是视网膜图像。

这意味着磅值是11x50
插图应该是UIEdgeInsetsMake(5.0f, 5.0f, 5.0f, 5.0f)

【讨论】:

  • 感谢这项工作,但你能解释一下你在哪里计算出它是 5,5,5,5。来自 11x50 的图像??
  • @StuartM 我想角是 5 点宽,图像是对称的。当然,您可以增加topbottom 组件。如果图像不应该垂直调整大小,您甚至可以使用(0, 5.0f, 50.0f, 5.0f)
  • 你有任何关于如何实际解决这个问题的信息吗?提示、技巧或教程?
  • @StuartM 这对我来说似乎很明显,请阅读resizableImageWithCapInsets 的文档。概念与 Android 上的NinePatch 相同。
【解决方案2】:

使用以下代码创建可拉伸图像并将其分配给相应的 UIImageView

UIImage *bgImage = [[UIImage imageNamed:@"Signup"] stretchableImageWithLeftCapWidth:10 topCapHeight:10];

您需要正确计算 9 个补丁图像的 TopCap 和 LeftCap。 祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多