Извлеките и измените точку, в которой touchUpInside меняет touchUpOutside

Я сделал работу UISlider же, как слайдер «slide to unlock». То, что мне нужно сделать, – это определить момент, при котором снятие пальца классифицируется как touchUpOUTSIDE а не touchUpINSIDE . Это та точка, в которой вы скользите пальцем мимо конца слайдера слишком далеко. Я думаю, это то же самое, что и с UIButton , вы можете нажать кнопку, а затем отпустить палец от кнопки и в зависимости от того, как далеко вы продвигаетесь, его все равно можно классифицировать как touchUpInside . Если возможно, я хочу отметить целевую область кружком.

Как только мне удалось найти, где находится этот пункт, можно ли его изменить? Значит, у меня может быть большая целевая область?

Я действительно не знаю, с чего начать. благодаря

2 Solutions collect form web for “Извлеките и измените точку, в которой touchUpInside меняет touchUpOutside”

Согласно документам, событие UIControlEventTouchUpOutside запускается, когда палец выходит за границы элемента управления. Если вы пытаетесь изменить эту область, слайдер будет масштабироваться. Почему бы не просто связать действие для UIControlEventTouchUpOutside же, как UIControlEventTouchUpInside ?

Мне потребовалось несколько часов, но мне удалось разобраться в этом. Я провел много тестов, переопределяя touchMoved, touchesEnded и sendAction: action: target: event, и кажется, что любое касание в пределах 70 пикселей классов фреймов как касание INSIDE. Таким образом, для UISlider 292×52 любое касание от x: -70 до x: 362 или y: от -70 до 122 будет считаться внутренним касанием, даже если оно находится вне рамки.

Я придумал этот код, который переопределит пользовательский класс, чтобы позволить более крупной области 100 пикселей вокруг кадра считаться внутренним касанием:

 #import "UICustomSlider.h" @implementation UICustomSlider { BOOL callTouchInside; } -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { callTouchInside = NO; [super touchesMoved:touches withEvent:event]; } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { CGPoint touchLocation = [[touches anyObject] locationInView:self]; if (touchLocation.x > -100 && touchLocation.x < self.bounds.size.width +100 && touchLocation.y > -100 && touchLocation.y < self.bounds.size.height +100) callTouchInside = YES; [super touchesEnded:touches withEvent:event]; } -(void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event { if (action == @selector(sliderTouchOutside)) { // This is the selector used for UIControlEventTouchUpOutside if (callTouchInside == YES) { NSLog(@"Overriding an outside touch to be an inside touch"); [self sendAction:@selector(UnLockIt) to:target forEvent:event]; // This is the selector used for UIControlEventTouchUpInside } else { [super sendAction:action to:target forEvent:event]; } } else { [super sendAction:action to:target forEvent:event]; } } 

С немного более тщательной настройкой я должен был бы использовать его и для противоположного. (Использование более близкого касания как внешнего касания).

  • Как быстро изменить объем ios с помощью UISlider
  • Предотвращение воздействия UIPageViewController на UISlider
  • Увеличение UISlider на 1 в диапазоне от 1 до 100
  • Как настроить значение UISlider в Swift
  • Синхронизация UISlider и UIScrollView
  • Получить указатель большого пальца UISlider в вертикальном положении
  • Изображение автоматически поворачивается после использования CIFilter
  • Пользовательский делегат не работает в iOS
  • UISlider плавно меняет стоимость
  • Как читать размер изображения большого пальца UISlider
  • Нажмите на UISlider для установки значения
  • Interesting Posts

    Когда диспетчер представлений отклонен, должен ли он очистить память?

    Через некоторое время анимация исчезает в приложении iOS.

    Как определить класс и модуль для представления, созданного программно в быстром

    Неиспользуемый метод UISearchDisplayDelegate

    Как я могу отобразить клавиатуру с моим UITextField в моем UITableView?

    iOS: совместное использование файлов без iTunes?

    Как проверить, разрешено ли разрешение «Разрешить полный доступ» из приложения:

    Применение CGAffineTransform к CGPath

    Когда использовать layoutSubview в iOS

    Где я должен сохранять данные и файлы, которые я хочу сохранить в долгосрочной перспективе, и как я могу предотвратить iCloud от их резервного копирования

    Поиск прототипов API в частной инфраструктуре iOS

    iOS 6.0.1 Simulator

    Передача параметров drawRect

    Как найти уведомление Apple Push, отправленное пользователю или нет с нашего сервера?

    Как реализовать прокрутку вправо в ячейку UITableView, подобную iOS Mail

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.