過去3日間、実際のスイッチボタン用のカスタムイメージとトラック用のカスタムイメージでカスタマイズされているため、自分のUISwitchをロールしようとしています。これまでのところ、バグや醜いコードが発生していて、うまく機能していません。
車輪の再発明をしたくないので、自分のUIImageでUISwitchをカスタマイズできる方法やライブラリを使用できますか?
過去3日間、実際のスイッチボタン用のカスタムイメージとトラック用のカスタムイメージでカスタマイズされているため、自分の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
カスタムUISwitchクラスを作成し、それを共有したいと思います。ここからカスタムUISwitchをダウンロードできます。
http://xcodenoobies.blogspot.com/2013/04/free-custom-uiswitch-flexible-colors.html
乾杯