在过去的三天里,我一直在试图推出我自己的UISwitch,因为它是针对实际切换按钮和轨道的自定义图像自定义的。到目前为止,它已经导致了错误和难看的代码,并且它不能正常工作。自定义UISwitch?
由于我不想重新发明轮子,是否有任何方法或库可供我使用,以便使用我自己的UIImage自定义UISwitch?
在过去的三天里,我一直在试图推出我自己的UISwitch,因为它是针对实际切换按钮和轨道的自定义图像自定义的。到目前为止,它已经导致了错误和难看的代码,并且它不能正常工作。自定义UISwitch?
由于我不想重新发明轮子,是否有任何方法或库可供我使用,以便使用我自己的UIImage自定义UISwitch?
这是一个几乎完整的类UISwitch控制。由于它是开源的,您可以对它进行子类化或修改,以便使用图像对其进行定制。
您可以使用层交换机的完全自定义的版本。
下面是一个简单的例子。您应该可以修改它以使用图像或您想要绘制的任何自定义图形。
代替标准外观开关,它使用红色和绿色填充指示开/关状态。它的行为与UISwitch相同,只是使用不同的图形。由于我们使用的是CALayer,所以颜色转换也为我们制作了动画。
//CustomSwitch.H
#import <Foundation/Foundation.h>
@interface CustomSwitch : UISwitch {
CALayer* uiLayer;
}
@end
//CustomSwitch.m
#import "CustomSwitch.h"
#import "QuartzCore/QuartzCore.h"
@implementation CustomSwitch
-(id) initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
[self addTarget:self action:@selector(checked:) forControlEvents:UIControlEventValueChanged];
if (NULL!=self)
{
[self customLayout];
}
return self;
}
-(void) checked:(id) event
{
uiLayer.backgroundColor= [self isOn] ? [UIColor greenColor].CGColor : [UIColor redColor].CGColor;
}
-(void) customLayout
{
uiLayer = [CALayer layer];
uiLayer.frame = self.frame;
uiLayer.backgroundColor= [UIColor redColor ].CGColor;
[[self layer] addSublayer:uiLayer];
}
-(void)dealloc
{
[uiLayer release];
}
@end
谢谢,这也是一个很好的技巧。 – 2012-08-12 21:43:32
我做了一个自定义的UISwitch类,我想分享它。 您可以在这里下载定制UISwitch:
http://xcodenoobies.blogspot.com/2013/04/free-custom-uiswitch-flexible-colors.html
干杯
你肯定没有库已经具备的功能即时寻找实现? – 2012-08-12 18:34:29
@iBradApps这是图书馆:)或者你可以自己做。 – 2012-08-12 18:34:54
或查看下面详细介绍的图层方法。我不知道这是否是一种更好的方法,因为原作可能仍然在渲染之下。可能有一种方法可以禁用它。最后,我会采用最具可维护性和最佳性能的方式。 – Brian 2012-08-12 18:57:42