Я новичок в разработке iOS, но мне нужно реализовать 3d touch на UIButton, когда пользователь наложил силу на контекстное меню кнопки, даже если кто-то может просто предоставить мне пример кода в ObjectiveC для 3d touch, будет оценен , Заранее спасибо.Возможно ли реализовать 3d touch на UIButton?
ответ
Да, у меня есть демонстрация того, как обнаружить 3d touch на UIButton
в примере приложения на github ниже. Для части всплывающих окон меню я оставлю это для вас, но это даст вам силу/3d touch.
https://github.com/foggzilla/DFContinuousForceTouchGestureRecognizer
Как я делаю это, чтобы использовать DFContinuousForceTouchGestureRecognizer, что я сделал доступной в проекте образца.
DFContinuousForceTouchGestureRecognizer
содержит постоянные обновления о изменениях давления, поэтому вы можете делать приятные вещи, такие как преобразование кнопки, поскольку пользователь меняет свое давление на нее, в отличие от одного события. Если вам просто нужно одно событие, вы можете игнорировать eveything в DFContinuousForceTouchDelegate
, за исключением обратного вызова - (void) forceTouchRecognized
.
Вы можете загрузить это приложение и запустить образец приложения на устройстве, которое поддерживает принудительное нажатие, чтобы увидеть, как оно себя чувствует.
В вашем UIViewController реализация:
- (void)viewDidLoad {
[super viewDidLoad];
_forceTouchRecognizer = [[DFContinuousForceTouchGestureRecognizer alloc] init];
_forceTouchRecognizer.forceTouchDelegate = self;
[self.button addGestureRecognizer:_forceTouchRecognizer];
}
реализует протокол делегата для силового контакта:
#pragma DFContinuousForceTouchDelegate
- (void)forceTouchRecognized:(DFContinuousForceTouchGestureRecognizer *)recognizer {
self.button.transform = CGAffineTransformIdentity;
[self.button setNeedsDisplay];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[[[UIAlertView alloc] initWithTitle:@"Force Touch Button" message:@"YEAH!!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
});
}
- (void)forceTouchRecognizer:(DFContinuousForceTouchGestureRecognizer *)recognizer didStartWithForce:(CGFloat)force maxForce:(CGFloat)maxForce {
CGFloat transformDelta = 1.0f + ((force/maxForce)/3.0f);
self.button.transform = CGAffineTransformMakeScale(transformDelta, transformDelta);
[self.button setNeedsDisplay];
}
- (void)forceTouchRecognizer:(DFContinuousForceTouchGestureRecognizer *)recognizer didMoveWithForce:(CGFloat)force maxForce:(CGFloat)maxForce {
CGFloat transformDelta = 1.0f + ((force/maxForce)/3.0f);
self.button.transform = CGAffineTransformMakeScale(transformDelta, transformDelta);
[self.button setNeedsDisplay];
}
- (void)forceTouchRecognizer:(DFContinuousForceTouchGestureRecognizer *)recognizer didCancelWithForce:(CGFloat)force maxForce:(CGFloat)maxForce {
self.button.transform = CGAffineTransformIdentity;
[self.button setNeedsDisplay];
}
- (void)forceTouchRecognizer:(DFContinuousForceTouchGestureRecognizer *)recognizer didEndWithForce:(CGFloat)force maxForce:(CGFloat)maxForce {
self.button.transform = CGAffineTransformIdentity;
[self.button setNeedsDisplay];
}
- (void)forceTouchDidTimeout:(DFContinuousForceTouchGestureRecognizer *)recognizer {
self.button.transform = CGAffineTransformIdentity;
[self.button setNeedsDisplay];
}
Обрати внимание, что это будет полезно только на устройстве, которое поддерживает силу прикосновения.
Кроме того, вы не должны добавить DFContinuousForceTouchGestureRecognizer
к виду, если вы работаете на iOS8 или под, так как он использует новый force
свойство на UITouch
доступны только в iOS9.
Если добавить это на iOS8 это приведет к краху, так условно добавить распознаватель на основе того, что IOS версии вы работаете, если вы поддерживаете версии старше прошивкой 9.
Вы можете перегрузить UIButton
и изучить force
имущества на UITouch
эсов в
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event;
- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event;
Основываясь на том, что происходит здесь, вы можете отправить свое собственное действие для силы прикосновений, с :
- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents;
Зачем кому-то делать это? – Fattie
- 1. Лучший способ выполнить действие на 3D Touch на UIButton
- 2. 3D Touch на отзывчивом
- 3. 3D touch/Force touch реализация
- 4. Как реализовать 3D-Touch Peek-and-select?
- 5. Реализовать сенсорные отменить на UIButton
- 6. Событие UIButton «touch hold»
- 7. UIButton smooth touch effect
- 8. iOS UIScrollView отменить UIButton touch на прокрутке
- 9. 3D Touch Shortcut Widget
- 10. Silent 3D Touch Quick Action
- 11. ios UIButton touch cancel
- 12. UIButton Touch and Hold
- 13. UIButton touch не регистрируется
- 14. Flipping UIButton On Touch
- 15. 3d touch перейти к определенному viewController
- 16. iOS: требуется 3D Touch?
- 17. Реализовать 3D-Touch «Peek and Pop» для Manual Segue
- 18. UIButton Touch Up Inside TouchesBegan
- 19. iOS 3D Touch программно
- 20. 3D Touch на Xcode 8 & Simulator 10
- 21. 3D Touch и UITableViewCell
- 22. Возможно ли реализовать Rajawali без использования градации?
- 23. Имитировать UITextField touch от UIButton
- 24. 3D Touch заглядывает и касается
- 25. Touch Slide over UIButton issue
- 26. UIButton crashing app on touch
- 27. Скрыть UINavigationBar 3D touch
- 28. 3D touch to UITabView
- 29. Заказ UIApplicationShortcutItems (3D Touch)
- 30. Поддерживает ли Xcode 7.1 beta 3 3D Touch на Simulator?
Принимали ли вы посмотрите на код, при условии яблоком в своем списке изменений в iOS 9.1? https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS9_1.html#//apple_ref/doc/uid/TP40016572-SW1 – luk2302
Да, я изучил его, но проблема все образцы кода находятся в быстрой последовательности, и я попытался найти их в Objective C, но он не работает в соответствии с моей потребностью во-вторых, симулятор также не поддерживает 3d touch сейчас, поэтому мне нужен совершенный код, чтобы сэкономить некоторое время, если вы могли бы просто предоставить мне структуру использования 3d touch в Objective, что было бы большой помощью. –
@HarryNg Я в том же положении, что и Абдул. Да, у вас могут быть приложения, которые запускают как Obj-C, так и Swift, но в коде AppDelegate должен быть реализован много кода для 3D Touch, поэтому вы либо конвертируете каждую строку кода в этот файл, либо создаете способ ввода 3D Touch с использованием Obj-C. Он прав, что все образцы кода Swift ... ваш комментарий воняет. – user717452