gpt4 book ai didi

ios - 自动应用 cap insets 的 UIButton 子类

转载 作者:行者123 更新时间:2023-11-29 13:15:18 25 4
gpt4 key购买 nike

好吧,我觉得我有一个好主意。一个 UIButton,带有自动应用于背景图像的 cap insets。

@implementation JLTCapInsetButton

- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state
{
CGFloat leftRight = (image.size.width - 1) / 2;
CGFloat topBottom = (image.size.height - 1) / 2;
UIEdgeInsets insets = UIEdgeInsetsMake(topBottom, leftRight, topBottom, leftRight);
UIImage *capInsetImage = [image resizableImageWithCapInsets:insets];

[super setBackgroundImage:capInsetImage forState:state];
}

@end

这不起作用,因为 IB 不使用 -setBackgroundImage:forState:。我的解决方法是使用 -awakeFromNib

- (void)awakeFromNib
{
[self JLT_fixBackgroundImageForState:UIControlStateNormal];
[self JLT_fixBackgroundImageForState:UIControlStateHighlighted];
[self JLT_fixBackgroundImageForState:UIControlStateDisabled];
[self JLT_fixBackgroundImageForState:UIControlStateSelected];
[self JLT_fixBackgroundImageForState:UIControlStateSelected | UIControlStateHighlighted];
[self JLT_fixBackgroundImageForState:UIControlStateSelected | UIControlStateDisabled];
}

- (void)JLT_fixBackgroundImageForState:(UIControlState)state
{
UIImage *backgroundImage = [self backgroundImageForState:state];

if (backgroundImage)
[self setBackgroundImage:backgroundImage forState:state];
}

这不起作用,因为如果为 UIControlStateNormal 设置图像,[self backgroundImageForState:state] 总是返回一个值。

解码时是否有一种干净的方式来 Hook 背景图像的设置?是否有一种干净的方法来检测状态是否具有背景图像而不仅仅是来自基本状态的隐含图像?

最佳答案

如何在修复之前保留对已应用于 UIControlStateNormal 的图像的引用?对于后续的控制状态,只需在应用修复之前检查图像是否相同,如果是,则跳过修复该状态的图像...

关于ios - 自动应用 cap insets 的 UIButton 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15975330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com