Ios 定制女巫?

Ios 定制女巫?,ios,customization,uiswitch,Ios,Customization,Uiswitch,在过去的三天里,我一直在尝试滚动我自己的UISwitch,因为它是定制的,带有实际开关按钮的自定义图像和轨道的自定义图像。到目前为止,它已经导致了错误和丑陋的代码,它只是不能很好地工作 既然我不想重新发明轮子,有没有什么方法或库可以让我用自己的UIImage自定义UISwitch 这是一个几乎完全类似UISwitch的控件。由于它是开源的,您可以对其进行子类化/修改,以便使用图像对其进行自定义 这是一个几乎完全类似UISwitch的控件。由于它是开源的,您可以对其进行子类化/修改,以便使用图像对

在过去的三天里,我一直在尝试滚动我自己的UISwitch,因为它是定制的,带有实际开关按钮的自定义图像和轨道的自定义图像。到目前为止,它已经导致了错误和丑陋的代码,它只是不能很好地工作


既然我不想重新发明轮子,有没有什么方法或库可以让我用自己的UIImage自定义UISwitch

这是一个几乎完全类似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
//CustomSwitch.H
#进口
@接口自定义开关:UISwitch{
CALayer*uiLayer;
}
@结束
//CustomSwitch.m
#导入“CustomSwitch.h”
#导入“QuartzCore/QuartzCore.h”
@自定义交换机的实现
-(id)initWithFrame:(CGRect)帧
{
self=[super initWithFrame:frame];
[自添加目标:自操作:@选择器(选中:)for ControlEvents:UIControlEventValueChanged];
如果(空!=self)
{
[自定义布局];
}        
回归自我;
}
-(无效)已选中:(id)事件
{
uiLayer.backgroundColor=[self-isOn]?[UIColor-greenColor].CGColor:[UIColor-redColor].CGColor;
}
-(无效)自定义布局
{
uiLayer=[CALayer层];
uiLayer.frame=self.frame;
uiLayer.backgroundColor=[UIColor redColor].CGColor;
[[self layer]addSublayer:uiLayer];
}
-(无效)解除锁定
{
[uiLayer release];
}
@结束

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

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

它使用红色和绿色填充来指示开/关状态,而不是标准外观的开关。它的行为与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
//CustomSwitch.H
#进口
@接口自定义开关:UISwitch{
CALayer*uiLayer;
}
@结束
//CustomSwitch.m
#导入“CustomSwitch.h”
#导入“QuartzCore/QuartzCore.h”
@自定义交换机的实现
-(id)initWithFrame:(CGRect)帧
{
self=[super initWithFrame:frame];
[自添加目标:自操作:@选择器(选中:)for ControlEvents:UIControlEventValueChanged];
如果(空!=self)
{
[自定义布局];
}        
回归自我;
}
-(无效)已选中:(id)事件
{
uiLayer.backgroundColor=[self-isOn]?[UIColor-greenColor].CGColor:[UIColor-redColor].CGColor;
}
-(无效)自定义布局
{
uiLayer=[CALayer层];
uiLayer.frame=self.frame;
uiLayer.backgroundColor=[UIColor redColor].CGColor;
[[self layer]addSublayer:uiLayer];
}
-(无效)解除锁定
{
[uiLayer release];
}
@结束

我制作了一个定制的UISwitch类,我想与大家分享。 您可以在此处下载自定义UI开关:


干杯

我制作了一个定制的UISwitch课程,我想与大家分享。 您可以在此处下载自定义UI开关:


干杯

您确定没有库已经实现了我想要的功能吗?@iBradApps这就是库:),或者您可以自己创建。或者查看下面详细介绍的层方法。我不知道这是否是一种更好的方法,因为原作可能仍在幕后渲染。可能有一种方法可以禁用它。最后,我会选择最易维护、性能最好的方式。我接受了,因为我设法修复了自己定制的UISwitch实现,但使用了UIButtons,但我建议其他人只使用这个库,因为我花了很长时间来完善自己的代码。你确定没有库已经实现了我要实现的功能吗?@iBradApps这就是库:),或者你可以自己创建。或者查看下面详细介绍的层方法。我不知道这是否是一种更好的方法,因为原作可能仍在幕后渲染。可能有一种方法可以禁用它。最后,我选择了最易维护、性能最好的方式。我接受了,因为我成功地修复了自己定制的UISwitch实现,但使用了UIButtons,但我建议其他人只使用这个库,因为我花了很长时间来完善自己的代码。