自定义UISwitch?

时间:2012-08-12 18:28:42

标签: ios customization uiswitch

在过去的三天里,我一直在努力推出自己的UISwitch,因为它是根据实际切换按钮的自定义图像和轨道的自定义图像进行自定义的。到目前为止,它已经导致了错误和丑陋的代码,而且效果不佳。

由于我不想重新发明轮子,有没有我可以使用的方法或库,允许我用我自己的UIImage自定义UISwitch?

3 个答案:

答案 0 :(得分:2)

这是一个几乎完全类似UISwitch的控件。由于它是opensource,您可以对其进行子类化/修改,以便使用图像对其进行自定义。

https://github.com/domesticcatsoftware/DCRoundSwitch

答案 1 :(得分:2)

您可以使用图层创建交换机的完全自定义版本。

下面是一个简单的例子。您应该能够修改它以使用图像或您想要绘制的任何自定义图形。

它使用红色和绿色填充来指示开/关状态,而不是标准外观开关。它的行为与`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

答案 2 :(得分:1)

我制作了一个自定义的UISwitch类,我想分享它。 您可以在此处下载自定义UISwitch:

http://xcodenoobies.blogspot.com/2013/04/free-custom-uiswitch-flexible-colors.html

干杯