在过去的三天里,我一直在尝试推出自己的 UISwitch,因为它是使用自定义图像为实际切换按钮和自定义图像进行自定义的。到目前为止,它已经导致了错误和丑陋的代码,而且它不能很好地工作。
由于我不想重新发明轮子,有什么方法或库可以让我用自己的 UIImage 自定义 UISwitch 吗?
在过去的三天里,我一直在尝试推出自己的 UISwitch,因为它是使用自定义图像为实际切换按钮和自定义图像进行自定义的。到目前为止,它已经导致了错误和丑陋的代码,而且它不能很好地工作。
由于我不想重新发明轮子,有什么方法或库可以让我用自己的 UIImage 自定义 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
这是一个几乎完整的类似 UISwitch 的控件。由于它是开源的,因此您可以对其进行子类化/修改,以便使用图像对其进行自定义。
我制作了一个自定义 UISwitch 类,我想分享它。您可以在此处下载自定义 UISwitch:
http://xcodenoobies.blogspot.com/2013/04/free-custom-uiswitch-flexible-colors.html
干杯