增加拇指“点击区域”在UISlider [英] Increasing a thumbs "click area" in UISlider
问题描述
我正在创建一个自定义UISlider并且想知道,如何增加拇指图像的点击区域?下面的代码效果很好,除了拇指的点击区域保持不变。如果我没错,我相信标准拇指面积是19像素?让我们说我想用下面的代码将它增加到35px,我需要采取哪些步骤?请记住,我根本不是这个领域的专家。
I am creating a custom UISlider and wonder, how do you increase a thumb image's "click area" ? The code below works great, except the thumb's "click area" remains unchanged. If I am not wrong, I believe the standard thumb area is 19 px ? Lets say I would like to increase it to 35px with the following code below, what steps do I need to take? Keep in mind I am not an expert within this area at all.
编辑 以下代码已更正并准备好复制意大利面!希望对您有所帮助!
main.h
#import "MyUISlider.h"
@interface main : MLUIViewController <UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate, UIActionSheetDelegate, UIAlertViewDelegate, MFMailComposeViewControllerDelegate, UIGestureRecognizerDelegate, MLSearchTaskDelegate, MLDeactivateDelegate, MLReceiptDelegate>
{
..........
}
- (void)create_Custom_UISlider;
main.m
- (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;
}
-(void) sliderAction: (UISlider *) sender{
if(sender.value !=1.0){
[sender setValue: 0.00 animated: YES];
}
else{
[sender setValue 0.00 animated: YES];
// add some code here depending on what you want to do!
}
}
编辑(试图具有以下代码的子类)
EDIT (trying to subclass with the code below)
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
{
return CGRectInset ([super thumbRectForBounds:bounds trackRect:rect value:value], 10 , 10);
}
@end
推荐答案
您必须在自定义子类<中覆盖 thumbRectForBounds:trackRect:value:
/ strong>(而不是像你在代码中那样自己调用方法,除了返回一个你甚至懒得检索的值之外什么都不做。)
You have to override thumbRectForBounds:trackRect:value:
in a custom subclass (instead of calling the method yourself like you do in your code, which does nothing except returning a value that you don't even bother to retrieve).
thumbRectForBounds:trackRect:value:
不是设置 tumb rect的方法,而是 get 它。滑块将在内部调用此 thumbRectForBounds:trackRect:value:
方法以了解绘制拇指图像的位置,因此您需要覆盖它 - 如文档中所述 - 返回你想要的 CGRect
(这样你想要的是35x35px)。
thumbRectForBounds:trackRect:value:
is not a method to set the tumb rect, but to get it. The slider will internally call this thumbRectForBounds:trackRect:value:
method to know where to draw the thumb image, so you need to override it — as explained in the documentation — to return the CGRect
you want (so that it will be 35x35px as you wish).
这篇关于增加拇指“点击区域”在UISlider的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!