Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone “增加拇指”;单击“区域”;在乌斯利德_Iphone_Ios_Uislider - Fatal编程技术网

Iphone “增加拇指”;单击“区域”;在乌斯利德

Iphone “增加拇指”;单击“区域”;在乌斯利德,iphone,ios,uislider,Iphone,Ios,Uislider,我正在创建一个自定义UISlider,想知道如何增加拇指图像的“点击区域”?下面的代码非常有效,除了拇指的“点击区域”保持不变。如果我没有错的话,我相信标准拇指面积是19像素?假设我想用下面的代码将其增加到35px,我需要采取什么步骤?请记住,我根本不是这方面的专家 编辑下面的代码已更正,可以复制!希望它能帮助你 main.h #import "MyUISlider.h" @interface main : MLUIViewController <UITableViewDelegate,

我正在创建一个自定义UISlider,想知道如何增加拇指图像的“点击区域”?下面的代码非常有效,除了拇指的“点击区域”保持不变。如果我没有错的话,我相信标准拇指面积是19像素?假设我想用下面的代码将其增加到35px,我需要采取什么步骤?请记住,我根本不是这方面的专家

编辑下面的代码已更正,可以复制!希望它能帮助你

main.h

#import "MyUISlider.h"

@interface main : MLUIViewController <UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate, UIActionSheetDelegate, UIAlertViewDelegate, MFMailComposeViewControllerDelegate, UIGestureRecognizerDelegate, MLSearchTaskDelegate, MLDeactivateDelegate, MLReceiptDelegate>
{
  ..........

}

- (void)create_Custom_UISlider;
#import <UIKit/UIKit.h>

@interface MyUISlider : UISlider {

}

@end
编辑(尝试使用下面的代码创建子类)

MyUISlider.h

#import "MyUISlider.h"

@interface main : MLUIViewController <UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate, UIActionSheetDelegate, UIAlertViewDelegate, MFMailComposeViewControllerDelegate, UIGestureRecognizerDelegate, MLSearchTaskDelegate, MLDeactivateDelegate, MLReceiptDelegate>
{
  ..........

}

- (void)create_Custom_UISlider;
#import <UIKit/UIKit.h>

@interface MyUISlider : UISlider {

}

@end

您必须在自定义子类中重写
thumbRectForBounds:trackRect:value:
(而不是像在代码中那样自己调用该方法,它除了返回一个您甚至懒得检索的值之外,什么都不做)


thumbRectForBounds:trackRect:value:
不是设置tumb rect的方法,而是获取tumb rect的方法。滑块将在内部调用此
thumbRectForBounds:trackRect:value:
方法以了解在何处绘制拇指图像,因此您需要覆盖它-如文档中所述-以返回所需的
cRect
(以便它将是35x35px,如您所愿)。

您可以检查我的双滑块

总之,我实现了命中测试方法,因此调用了BeginKingWithTouch

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if (CGRectContainsPoint(self.leftHandler.frame, point) || CGRectContainsPoint(self.rightHandler.frame, point)) {
        return self;
    }

    return [super hitTest:point withEvent:event];
}

查看以了解更多详细信息(为什么要选择自定义滑块,而您可以更改默认滑块的区域;)

看看这段代码,它为我增加了我的UISlider的触摸区域,希望它也能帮助你

CGRect sliderFrame = yourSlider.frame;
sliderFrame.size.height = 70.0;
[yourSlider setFrame:sliderFrame];

针对Swift 3.0和iOS 10更新

private func generateHandleImage(with color: UIColor) -> UIImage {
    let rect = CGRect(x: 0, y: 0, width: self.bounds.size.height + 20, height: self.bounds.size.height + 20)

    return UIGraphicsImageRenderer(size: rect.size).image { (imageContext) in
        imageContext.cgContext.setFillColor(color.cgColor)
        imageContext.cgContext.fill(rect.insetBy(dx: 10, dy: 10))
    }
}
电话:

self.sliderView.setThumbImage(self.generateHandleImage(with: .white), for: .normal)
原始答案:

到目前为止,最简单的方法只是增加拇指图像的大小,周围有不可见的边框:

- (UIImage *)generateHandleImageWithColor:(UIColor *)color
{
    CGRect rect = CGRectMake(0.0f, 0.0f, self.bounds.size.height + 20.f, self.bounds.size.height + 20.f);
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.f);
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillRect(context, CGRectInset(rect, 10.f, 10.f));

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}
然后将此图像添加到滑块:

[self.sliderView setThumbImage:[self generateHandleImageWithColor:[UIColor redColor]] forState:UIControlStateNormal];

我也遇到了这个问题,通过覆盖

-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
方法。
你可以对那些你想要触摸的点返回YES。

我尝试了不同的方法,但失败了。可能是因为我很坏,做错了什么。我在上面编辑了我的代码,你能展示一下(填写或修改代码)并展示一下你会怎么做吗?如果没有,谢谢你的帮助。你至少为我指明了正确的方向……你有正确的代码结构。您所需要的只是实现根据
trackRect
value
返回正确的
CGRect
的方法(因为拇指当然位于不同的位置,具体取决于滑块值),如文档中所述。只是一些简单的数学题。当然,还要编写
customSlider=[[MyUISlider alloc]initWithFrame:frame]
创建自定义UISlider
方法中,实例化
MyUISlider
而不是标准的
UISlider
。然后回答Ali。我忘了把代码改成MyUISlider alloc。。但我不明白的是,我应该如何构造方法中的代码:-(CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value{??????}来返回一些有用的东西。我知道你不能给我确切的数字,但是如果你看我的代码的其余部分,你会在这个方法中放什么?再次感谢你的帮助!为什么不简单地依赖
super
实现,并简单地返回
CGRectInset([super-thumbRectForBounds:bounds-trackRect:rect-value:value],-10,-10)
要使矩形比
UISlider
超类使用的矩形大10x10,例如?在
thumbRectForBounds…
的实现中似乎有错误。在调用
CGRectInset
之前没有
return
语句。您应该有:
返回CGRectInset([super-thumbRectForBounds:bounds-trackRect:rect-value:value],-10,-10)在这里查看我的工作示例以回答同一个问题:可能重复令人敬畏的答案!我补充了一个Swift 3.0,iOS 10版本的Objective-C代码。工作起来很有魅力!这个答案(Swift)只为我生成并放置了这个图像。它没有为我更改拇指的“单击区域”…对我来说,当值为minimumValue时,拇指不会与UISlider的左边缘对齐。因为UISlider会根据拇指图像的大小调整minimumValue位置。这个问题有什么解决方案吗?告诉我如果我想添加自定义图像,你可以将滑块设置为1000高,但拇指除外。还是一样大小。