Objective-Cで通常のスライダーと画像スライダーを取得する「DCSlider」クラスを作成しました。
下記よりファイルのダウンロードが行えます。
ダウンロード
使用方法
通常のスライダー取得
1
2
3
UISlider * slider = [ DCSlider planeSlider: self rect: CGRectMake ( 50 , 100 , 220 , 0 )
minVolume: 0.0 maxVolume: 1.0 defaultVolume: 0.5f continuous: NO
tag: 1 selector: @selector ( sliderChangedEvent: )];
画像スライダー取得
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//つまみのサムネイル画像
UIImage * imageForThumb = [ self getUIImageFromResources: @"slider_thumb" ext: @"png" ];
//つまみのサムネイル画像 (ハイライト時)
UIImage * imageForThumbHighlited = [ self getUIImageFromResources: @"slider_thumb-o" ext: @"png" ];
//スライダーのベース画像
UIImage * imageMinBase = [ self getUIImageFromResources: @"slider_min" ext: @"png" ];
UIImage * imageMaxBase = [ self getUIImageFromResources: @"slider_max" ext: @"png" ];
UISlider * imageSlider = [ DCSlider imageSlider: self rect: CGRectMake ( 50 , 200 , 224 , 22 )
minVolume: 0.0 maxVolume: 1.0 defaultVolume: 0.5f continuous: NO
thumbImage: imageForThumb thumbHighlitedImage: imageForThumbHighlited minImage: imageMinBase maxImage: imageMaxBase
tag: 1 selector: @selector ( sliderChangedEvent: )];
ソースコード
DCSlider.h
1
2
3
4
5
6
7
8
9
#import <UIKit/UIKit.h>
@interface DCSlider : UISlider
#pragma mark - public method
+ ( UISlider * ) planeSlider: ( id ) delegate rect: ( CGRect ) rect minVolume: ( CGFloat ) minVolume maxVolume: ( CGFloat ) maxVolume defaultVolume: ( CGFloat ) defaultVolume continuous: ( BOOL ) continuous tag: ( NSUInteger ) tag selector: ( SEL ) selector ;
+ ( UISlider * ) imageSlider: ( id ) delegate rect: ( CGRect ) rect minVolume: ( CGFloat ) minVolume maxVolume: ( CGFloat ) maxVolume defaultVolume: ( CGFloat ) defaultVolume continuous: ( BOOL ) continuous thumbImage: ( UIImage * ) thumbImage thumbHighlitedImage: ( UIImage * ) thumbHighlitedImage minImage: ( UIImage * ) minImage maxImage: ( UIImage * ) maxImage tag: ( NSUInteger ) tag selector: ( SEL ) selector ;
@end
DCSlider.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#import "DCSlider.h"
@implementation DCSlider
// スライダー取得
+ ( UISlider * ) planeSlider: ( id ) delegate rect: ( CGRect ) rect minVolume: ( CGFloat ) minVolume maxVolume: ( CGFloat ) maxVolume defaultVolume: ( CGFloat ) defaultVolume continuous: ( BOOL ) continuous tag: ( NSUInteger ) tag selector: ( SEL ) selector
{
// スライダー生成
UISlider * slider = [[ UISlider alloc ] initWithFrame: rect ];
// 値指定
slider . minimumValue = minVolume ;
slider . maximumValue = maxVolume ;
slider . value = defaultVolume ;
if ( defaultVolume > maxVolume ) defaultVolume = maxVolume ;
if ( defaultVolume < minVolume ) defaultVolume = minVolume ;
// イベント指定
slider . continuous = continuous ;
slider . tag = tag ;
[ slider addTarget: delegate action: selector forControlEvents: UIControlEventValueChanged ];
return slider ;
}
// 画像スライダー取得
+ ( UISlider * ) imageSlider: ( id ) delegate rect: ( CGRect ) rect minVolume: ( CGFloat ) minVolume maxVolume: ( CGFloat ) maxVolume defaultVolume: ( CGFloat ) defaultVolume continuous: ( BOOL ) continuous thumbImage: ( UIImage * ) thumbImage thumbHighlitedImage: ( UIImage * ) thumbHighlitedImage minImage: ( UIImage * ) minImage maxImage: ( UIImage * ) maxImage tag: ( NSUInteger ) tag selector: ( SEL ) selector
{
// スライダー生成
UISlider * imageSlider = [[ UISlider alloc ] initWithFrame: rect ];
// 値指定
imageSlider . minimumValue = minVolume ;
imageSlider . maximumValue = maxVolume ;
imageSlider . value = defaultVolume ;
if ( defaultVolume > maxVolume ) defaultVolume = maxVolume ;
if ( defaultVolume < minVolume ) defaultVolume = minVolume ;
// 画像指定
UIImage * imageForThumb = thumbImage ;
UIImage * imageForThumbHighlited = thumbHighlitedImage ;
UIImage * imageMinBase = minImage ;
UIImage * imageForMin = [ imageMinBase stretchableImageWithLeftCapWidth: 4 topCapHeight: 0 ];
UIImage * imageMaxBase = maxImage ;
UIImage * imageForMax = [ imageMaxBase stretchableImageWithLeftCapWidth: 4 topCapHeight: 0 ];
[ imageSlider setThumbImage: imageForThumb forState: UIControlStateNormal ];
[ imageSlider setThumbImage: imageForThumbHighlited forState: UIControlStateHighlighted ];
[ imageSlider setMinimumTrackImage: [ imageForMin resizableImageWithCapInsets: UIEdgeInsetsFromString ( @"4" )]
forState: UIControlStateNormal ];
[ imageSlider setMaximumTrackImage: [ imageForMax resizableImageWithCapInsets: UIEdgeInsetsFromString ( @"4" )]
forState: UIControlStateNormal ];
// イベント指定
imageSlider . continuous = continuous ;
imageSlider . tag = tag ;
[ imageSlider addTarget: delegate action: selector forControlEvents: UIControlEventValueChanged ];
return imageSlider ;
}
@end
サンプルソースコード
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
@implementation ViewController
typedef enum sliderId : NSUInteger {
PLANE_SLIDER = 1 ,
IMAGE_SLIDER = 2
} sliderId ;
- ( void ) viewDidLoad
{
[ super viewDidLoad ];
//スライダー配置
[ self setSlider ];
//画像スライダー配置
[ self setImageSlider ];
}
//スライダー配置
- ( void ) setSlider
{
UISlider * slider = [ DCSlider planeSlider: self rect: CGRectMake ( 50 , 100 , 220 , 0 )
minVolume: SLIDER_MIN_VOLUME maxVolume: SLIDER_MAX_VOLUME defaultVolume: SLIDER_DEF_VOLUME continuous: NO
tag: PLANE_SLIDER selector: @selector ( sliderChangedEvent: )];
[ self . view addSubview: slider ];
}
//画像スライダー配置
- ( void ) setImageSlider
{
UIImage * imageForThumb = [ self getUIImageFromResources: @"slider_thumb" ext: @"png" ];
UIImage * imageForThumbHighlited = [ self getUIImageFromResources: @"slider_thumb-o" ext: @"png" ];
UIImage * imageMinBase = [ self getUIImageFromResources: @"slider_min" ext: @"png" ];
UIImage * imageMaxBase = [ self getUIImageFromResources: @"slider_max" ext: @"png" ];
UISlider * imageSlider = [ DCSlider imageSlider: self rect: CGRectMake ( 50 , 200 , 224 , 22 )
minVolume: SLIDER_MIN_VOLUME maxVolume: SLIDER_MAX_VOLUME defaultVolume: SLIDER_DEF_VOLUME continuous: NO
thumbImage: imageForThumb thumbHighlitedImage: imageForThumbHighlited minImage: imageMinBase maxImage: imageMaxBase
tag: IMAGE_SLIDER selector: @selector ( sliderChangedEvent: )];
[ self . view addSubview: imageSlider ];
}
//スライダー変更時のイベント
- ( void ) sliderChangedEvent: ( UISlider * ) slider
{
NSUInteger tag = slider . tag ;
if ( tag == PLANE_SLIDER ) {
NSLog ( @"sliderValue: %f" , slider . value );
} else if ( tag == IMAGE_SLIDER ) {
NSLog ( @"imageSliderValue: %f" , slider . value );
}
}
//画像ファイル取得
- ( UIImage * ) getUIImageFromResources: ( NSString * ) fileName ext: ( NSString * ) ext
{
NSString * path = [[ NSBundle mainBundle ] pathForResource: fileName ofType: ext ];
UIImage * img = [[ UIImage alloc ] initWithContentsOfFile: path ];
return ( img );
}
@end
お薦めの参考書
本気ではじめるiPhoneアプリ作り Xcode 7.x+Swift 2.x対応
iOSアプリ開発をこれから始める方に最もお薦めな一冊です。解り辛い点は図解入りで解説されており、プログラミングの動作の仕組みから詳しく知ることができます。基本から通信処理まで押さえられており、アプリ公開の手順についても解説されています。