我正在尝试创建一个自定义 UISlider 并想增加拇指图像的隐藏“点击区域”?下面的代码效果很好,只是拇指的“点击区域”保持不变。如果我没记错的话,我相信标准拇指区域大概是 20 px 大?
我现在的情况如下:滑块效果很好,看起来很棒,但我必须能够将“隐藏点击区域”增加到与拇指使用的图片一样大。假设我想使用下面的代码将其增加到 35px,我需要采取哪些步骤?
- (void)create_Custom_UISlider
{
CGRect frame = CGRectMake(20.0, 320.0, 280, 0.0);
customSlider = [[UISlider alloc] initWithFrame:frame];
[customSlider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];
// in case the parent view draws with a custom color or gradient, use a transparent color
customSlider.backgroundColor = [UIColor clearColor];
UIImage *stetchLeftTrack = [[UIImage imageNamed:@"blueslider.png"]
stretchableImageWithLeftCapWidth: 10.0 topCapHeight:0.0];
UIImage *stetchRightTrack = [[UIImage imageNamed:@"blueslider.png"]
stretchableImageWithLeftCapWidth: 260.0 topCapHeight:0.0];
// UIImage *thumbImg = [[UIImage imageNamed:@"slider_button00.png"]
// stretchableImageWithLeftCapWidth: 100.0 topCapHeight:100.0];
[customSlider setThumbImage: [UIImage imageNamed:@"slider_button.png"] forState:UIControlStateNormal];
[customSlider setMinimumTrackImage:stetchLeftTrack forState:UIControlStateNormal];
[customSlider setMaximumTrackImage:stetchRightTrack forState:UIControlStateNormal];
// [customSlider thumbRectForBounds: thumb tackRect: frame value: customSlider.value];
customSlider.minimumValue = 0.0;
customSlider.maximumValue = 1.0;
customSlider.continuous = NO;
customSlider.value = 0.00;
}
这段代码的问题是我没有对 UISlider 进行子类化。然后我将代码更改为以下代码(将其子类化),我不确定我需要什么类型的代码才能使其正常工作?
我得到以下外观:http://tinypic.com/view.php?pic=347dufa&s=5。第一张图片表示没有被子类化时的案例 nr 1 并且“隐藏的点击区域”没有按预期工作,而图片 nr 2 表示被子类化时的案例 nr 2(下面的代码)。我现在想知道 A),我是否在这样的正确编码轨道上?B)我到底应该在这个方法中放什么
在我的方法中:
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value { CGRectInset ([super thumbRectForBounds:bounds trackRect:rect value:value], -10 , -10); }
为了将拇指放在正确的位置并使其再次滑动更大(隐藏的点击区域)。
主文件
#import "MyUISlider.h"
@interface main : MLUIViewController <UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate, UIActionSheetDelegate, UIAlertViewDelegate, MFMailComposeViewControllerDelegate, UIGestureRecognizerDelegate, MLSearchTaskDelegate, MLDeactivateDelegate, MLReceiptDelegate>
{
..........
}
- (void)create_Custom_UISlider;
主文件
- (void)viewDidLoad
{
[self create_Custom_UISlider];
[self.view addSubview: customSlider];
}
- (void)create_Custom_UISlider
{
CGRect frame = CGRectMake(20.0, 320.0, 280, 0.0);
customSlider = [[MyUISlider alloc] initWithFrame:frame];
[customSlider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];
// in case the parent view draws with a custom color or gradient, use a transparent color
customSlider.backgroundColor = [UIColor clearColor];
UIImage *stetchLeftTrack = [[UIImage imageNamed:@"blue_slider08.png"]
stretchableImageWithLeftCapWidth: 10.0 topCapHeight:0.0];
UIImage *stetchRightTrack = [[UIImage imageNamed:@"blue_slider08.png"]
stretchableImageWithLeftCapWidth: 260.0 topCapHeight:0.0];
[customSlider setThumbImage: [UIImage imageNamed:@"slider_button00"] forState:UIControlStateNormal];
[customSlider setMinimumTrackImage:stetchLeftTrack forState:UIControlStateNormal];
[customSlider setMaximumTrackImage:stetchRightTrack forState:UIControlStateNormal];
customSlider.minimumValue = 0.0;
customSlider.maximumValue = 1.0;
customSlider.continuous = NO;
customSlider.value = 0.00;
}
编辑(尝试使用下面的代码进行子类化)
MyUISlider.h
#import <UIKit/UIKit.h>
@interface MyUISlider : UISlider {
}
@end
MyUISlider.m
#import "MyUISlider.h"
@implementation MyUISlider
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value
{
CGRectInset ([super thumbRectForBounds:bounds trackRect:rect value:value], -10 , -10);
}
@end