gpt4 book ai didi

ios Horizo​​ntal UISlider 导致 UIPageViewController 在不需要时滑动页面

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:28:24 25 4
gpt4 key购买 nike

网页浏览中的单个或多个水平 slider 会造成问题。用户很难在不导致页面 View 滑动的情况下滑动 slider 的拇指。

我试过的解决方法

  1. 覆盖 Pan Gesture 使最小速度相关
  2. 在 slider 上放置一个不可见的矩形以捕获平移手势
  3. 覆盖 HitTest 使拇指点击矩形更大

最佳答案

迄今为止最好的结果是在自定义扩展的 UISlider 类中覆盖 Pan Gesture。发生的情况是在 UISlider 矩形中的任何位置检测到平移手势,而不仅仅是拇指。现在坚如磐石,没有页面浏览量滑动。

注意:同时提供了initWithFrame和initWithCoder,因此可以通过代码或XIB实例化sictSlider2。

如果用户在 slider 矩形内点击,也会处理点击。潘也有

[self sendActionsForControlEvents:UIControlEventValueChanged];

因为 ValueChanged 事件仅在拇指移动时发生,而当 Pan 处理程序接管时,拇指在移动一小段距离后停止移动。

快乐的剪切和粘贴!

代码:

#import "sictSlider2.h"

@implementation sictSlider2

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {


UIPanGestureRecognizer * recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
recognizer.delegate = self;
[self addGestureRecognizer:recognizer];

UITapGestureRecognizer * recognizer2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
recognizer2.delegate = self;
[self addGestureRecognizer:recognizer2];

UIPinchGestureRecognizer * recognizer3 = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
recognizer3.delegate = self;
[self addGestureRecognizer:recognizer3];

UISwipeGestureRecognizer * recognizer4 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
recognizer4.delegate = self;
[self addGestureRecognizer:recognizer4];

self.backgroundColor = [UIColor clearColor];
}
return self;
}


- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {

UIPanGestureRecognizer * recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
recognizer.delegate = self;
[self addGestureRecognizer:recognizer];

UITapGestureRecognizer * recognizer2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
recognizer2.delegate = self;
[self addGestureRecognizer:recognizer2];

UIPinchGestureRecognizer * recognizer3 = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
recognizer3.delegate = self;
[self addGestureRecognizer:recognizer3];

UISwipeGestureRecognizer * recognizer4 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
recognizer4.delegate = self;
[self addGestureRecognizer:recognizer4];

self.backgroundColor = [UIColor clearColor];
}
return self;
}


- (void)handleTap:(UITapGestureRecognizer *)recognizer{

CGPoint p = [recognizer locationInView:recognizer.view];
NSLog (@"in slider tap %f %f ", p.x, p.y);

float val = self.value; // current slider value
// t.x is in coords of the slider rect, so divide by width to get delta

val = p.x/self.frame.size.width;
[self setValue:val];
[self setNeedsDisplay];

}
- (void)handlePan:(UIPanGestureRecognizer *)recognizer {

CGPoint t = [recognizer translationInView:recognizer.view];
NSLog(@"in slider pan %f %f", t.x, t.y);

float val = self.value; // current slider value
// t.x is in coords of the slider rect, so divide by width to get delta

val = val + t.x/self.frame.size.width;

[self sendActionsForControlEvents:UIControlEventValueChanged];
[self setValue:val];
[self setNeedsDisplay];
[recognizer setTranslation:CGPointMake(0, 0) inView:recognizer.view];
}

- (void)handleSwipe:(UISwipeGestureRecognizer *)recognizer{
NSLog(@"slider SWIPE");}
@end

和.h

#import <UIKit/UIKit.h>

@interface sictSlider2 : UISlider
- (void)handleTap:(UITapGestureRecognizer *)recognizer;
- (void)handlePan:(UIPanGestureRecognizer *)recognizer;
- (void)handlePinch:(UIPinchGestureRecognizer *)recognizer;
- (void)handleSwipe:(UISwipeGestureRecognizer *)recognizer;
@end

关于ios Horizo​​ntal UISlider 导致 UIPageViewController 在不需要时滑动页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22571878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com