使用 capinsets 调整图像大小

4

我已经设置了一个像这样的按钮:

// Create facebook login button
facebookLoginButton = [[UIButton alloc] initWithFrame:CGRectMake(10, 20, 300,50)];
facebookLoginButton.autoresizingMask = UIViewAutoresizingFlexibleWidth;
//NSLog(@"facebook button view height is %f",facebookLoginButton.bounds.size.height);
//NSLog(@"facebook button view width is %f",facebookLoginButton.bounds.size.width);

UIImage *facebookButton = [[UIImage imageNamed:@"FacebookLogin"]
                           resizableImageWithCapInsets:UIEdgeInsetsMake(16,140,86,92)];
[facebookLoginButton setBackgroundImage:facebookButton forState:UIControlStateNormal];

我用Photoshop创建了一个按钮的图片,大小为200(w)x100(h)px。首先,这是否是适合iphone4/5上使用的视网膜图片的正确大小,以适应高度为50的登录框?另一个宽度无所谓,因为会被拉伸。

其次,下面是一个示例图片。我似乎无法确定'resizableImageWithCapInsets:UIEdgeInsetsMake'的正确插图。我该如何解决这个问题?除了我在SO链接的Android示例之外,是否有其他教程可以做到这一点。

enter image description here

2个回答

4
由于您明确定义了按钮的框架,并且创建了自己的图像,因此您不需要可调整大小的图像。您的按钮大小为300 x 50,因此制作一个300 x 50的图像(以及一个600 x 100的图像用于双倍分辨率设备),并将按钮的背景图像设置为该图像。
但是,我也会给出一个代码示例。对于您实际提供的图像,如果将其命名为FacebookLogin@2x.png,以便将其用作双倍分辨率图像,则要使用的值为resizableImageWithCapInsets:UIEdgeInsetsMake(0,50,0,50)。这是结果: enter image description here

示例图像为200x100像素,需要被拉伸以使F保持在左侧,右侧部分被拉伸。 - StuartM
好的,我已经编辑了答案以适应您实际给出的图像。 - matt
谢谢,我已经接受了答案 - 我实际上在这里创建了另一个问题http://stackoverflow.com/questions/15713799/image-not-resizing-correctly-using-resizableimagewithcapinsets - 这几乎是相同的答案。但如果您可以提供有关如何解决此问题或任何有用的教程以供学习,那将是很棒的。我在苹果文档中找不到任何有用/深入的信息。 - StuartM
图片高度为100,但按钮高度为50。因此,这必须是双倍分辨率图像。所以你必须将其命名为@2x。但对于实际的图像,你必须按照正常点来思考。因此,图像高度为50,宽度为100。你希望它在中间水平拉伸,所以插图距左侧和右侧各50;因此,在按钮中间需要重复单个像素列以填充生成的图像的中间部分。更多信息请参见我的书:http://www.apeth.com/iOSBook/ch15.html#_uiimage_and_uiimageview - matt

2

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