У любого есть идея, как мы можем реализовать функцию 3d touch
в objective C
? Я уже проверяю документацию приложения, но ни один пример не связан с объектным кодом C.
Любой образец кода или пример, как его реализовать? Заранее спасибо.iOS 3D Touch в Objective C
ответ
Вот пример адаптирован из примера yeungkaho на GitHub
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self handleTouches:touches];
}
-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self handleTouches:touches];
}
-(void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self setForcePercentage:0];
}
-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self setForcePercentage:0];
}
-(void)handleTouches:(NSSet<UITouch *> *)touches{
for (UITouch *touch in touches) {
CGFloat force = touch.force;
CGFloat percentage = force/touch.maximumPossibleForce;
[self setForcePercentage:percentage];
break;
}
}
-(void)setForcePercentage:(CGFloat)percentage{
NSLog(@"LEVEL = %f",percentage*100);
}
Как я делаю это, чтобы использовать DFContinuousForceTouchGestureRecognizer что я сделал доступен. Это расширение распознавателя жестов, которое обнаруживает силовое прикосновение и работает вместе с другими распознавателями жестов.
DFContinuousForceTouchGestureRecognizer
содержит постоянные обновления о изменениях давления, поэтому вы можете делать приятные вещи, например, увеличивать представление, поскольку пользователь меняет свое давление на него, а не просто вызывает одно событие. Если вам просто нужно одно событие, вы можете игнорировать eveything в DFContinuousForceTouchDelegate
, за исключением обратного вызова - (void) forceTouchRecognized
.
https://github.com/foggzilla/DFContinuousForceTouchGestureRecognizer
Вы можете скачать этот и запустить пример приложения на устройстве, которое поддерживает силы нажмите, чтобы увидеть, как это чувствует.
В вашем UIViewController реализация:
- (void) viewDidLoad {
[super viewDidLoad];
_forceTouchRecognizer = [[DFContinuousForceTouchGestureRecognizer alloc] init];
_forceTouchRecognizer.forceTouchDelegate = self;
[self.imageView addGestureRecognizer:_forceTouchRecognizer];
}
реализует протокол делегата для силового контакта:
#pragma DFContinuousForceTouchDelegate
- (void) forceTouchRecognized:(DFContinuousForceTouchGestureRecognizer*)recognizer {
self.imageView.transform = CGAffineTransformIdentity;
[self.imageView setNeedsDisplay];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[[[UIAlertView alloc] initWithTitle:@"Force Touch" 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.imageView.transform = CGAffineTransformMakeScale(transformDelta, transformDelta);
[self.imageView setNeedsDisplay];
}
- (void) forceTouchRecognizer:(DFContinuousForceTouchGestureRecognizer*)recognizer didMoveWithForce:(CGFloat)force maxForce:(CGFloat)maxForce {
CGFloat transformDelta = 1.0f + ((force/maxForce)/3.0f);
self.imageView.transform = CGAffineTransformMakeScale(transformDelta, transformDelta);
[self.imageView setNeedsDisplay];
}
- (void) forceTouchRecognizer:(DFContinuousForceTouchGestureRecognizer*)recognizer didCancelWithForce:(CGFloat)force maxForce:(CGFloat)maxForce {
self.imageView.transform = CGAffineTransformIdentity;
[self.imageView setNeedsDisplay];
}
- (void) forceTouchRecognizer:(DFContinuousForceTouchGestureRecognizer*)recognizer didEndWithForce:(CGFloat)force maxForce:(CGFloat)maxForce {
self.imageView.transform = CGAffineTransformIdentity;
[self.imageView setNeedsDisplay];
}
- (void) forceTouchDidTimeout:(DFContinuousForceTouchGestureRecognizer*)recognizer {
self.imageView.transform = CGAffineTransformIdentity;
[self.imageView setNeedsDisplay];
}
Обратите внимание, что это будет полезно только на устройстве, которое поддерживает силу прикосновения.
Кроме того, вы не должны добавить UIContinuousForceTouchGestureRecognizer к виду, если вы работаете на iOS8 или под, так как он использует новый force
свойство на UITouch
доступны только в iOS9.
Если вы добавите это на iOS8, это сработает, поэтому условно добавьте этот распознаватель на основе версии iOS, на которой вы работаете, если вы поддерживаете версии старше iOS9.
Я делюсь исходный код, нажав на значок приложения заселить 4 пункт в списке
Шаг 1: - Импорт класса в appDelegate.m
импорт SYS/utsname.ч
Шаг 2: -
#pragma MARK for Get Machine Name
- (NSString *) machineName {
struct utsname systemInfo;
uname(&systemInfo);
return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if([[self machineName] isEqualToString:@"iPhone8,2"]|| [[self machineName] isEqualToString:@"iPhone8,1"]) {
[self addEventsFor3DTouchEvents];
}
return YES;
}
Прагма MARK для добавления действий для трех D сенсорных событий
- (void) addEventsFor3DTouchEvents {
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0) {
UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc] initWithType:@"dynamic1" localizedTitle:TITLE_NAME_1 localizedSubtitle:@"" icon:[UIApplicationShortcutIcon iconWithTemplateImageName:TITLE_IMAGE_NAME_1] userInfo:nil];
UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc] initWithType:@"dynamic1" localizedTitle:TITLE_NAME_2 localizedSubtitle:@"" icon:[UIApplicationShortcutIcon iconWithTemplateImageName:TITLE_IMAGE_NAME_2] userInfo:nil];
UIApplicationShortcutItem *item3 = [[UIApplicationShortcutItem alloc] initWithType:@"dynamic1" localizedTitle:TITLE_NAME_3 localizedSubtitle:@"" icon:[UIApplicationShortcutIcon iconWithTemplateImageName:TITLE_IMAGE_NAME_3] userInfo:nil];
UIApplicationShortcutItem *item4 = [[UIApplicationShortcutItem alloc] initWithType:@"dynamic1" localizedTitle:TITLE_NAME_4 localizedSubtitle:@"" icon:[UIApplicationShortcutIcon iconWithTemplateImageName:TITLE_IMAGE_NAME_4] userInfo:nil];
[[UIApplication sharedApplication] setShortcutItems: @[ item1, item2, item3, item4 ]];
}
}
#pragma mark - 3DTouch Delegate Methods
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
[self moveThrough3DTouch:shortcutItem];
}
#pragma MARK for Handling Action for Three D Touch Events
- (void)moveThrough3DTouch:(UIApplicationShortcutItem *)temp {
if ([temp.localizedTitle isEqualToString:TITLE_NAME_1]) {
[self.tabBarController setSelectedIndex:0];
} else if([temp.localizedTitle isEqualToString:TITLE_NAME_2]) {
[self.tabBarController setSelectedIndex:1];
} else if([temp.localizedTitle isEqualToString:TITLE_NAME_3]) {
[self.tabBarController setSelectedIndex:2];
} else if([temp.localizedTitle isEqualToString:TITLE_NAME_4]) {
[self.tabBarController setSelectedIndex:3];
}
}
** Я использую контроллер Tab Bar в мое приложение, если хотите двигаться в поле зрения
- (void) moveToControllerScene {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:STORY_BOARD_IDENTIFIER bundle:nil];
YOUR_CONTROLLER_OBJECT *obj = [storyboard instantiateViewControllerWithIdentifier:@"YOUR_CONTROLLER_OBJECT"];
[navController pushViewController:obj animated:YES];
}
- 1. iOS 3D Touch программно
- 2. iOS: требуется 3D Touch?
- 3. Objective C touch event lock
- 4. IOS 9 Быстрые действия (3D Touch)
- 5. 3d Touch Alternative in Ios App
- 6. ios - Динамическое редактирование 3d touch shortcut list
- 7. 3D Touch Quick Actions внутри приложения iOS
- 8. 3D Touch Shortcut Widget
- 9. 3D touch/Force touch реализация
- 10. Векторы в какао Touch/Objective-C
- 11. 3D Touch и UITableViewCell
- 12. iOS Проверить разрешение 3D-касания в настройках
- 13. 3D Touch Application Shortcut Sorting
- 14. Скрыть UINavigationBar 3D touch
- 15. 3D Touch на отзывчивом
- 16. Заказ UIApplicationShortcutItems (3D Touch)
- 17. IOS, Tableview Objective C,
- 18. 3D touch to UITabView
- 19. NSUnknownKeyException ios Objective C
- 20. Доступ к Objective-C/Cocoa Touch Arrays
- 21. Objective C: Stop Scrolling on Touch
- 22. Полиморфизм в Objective-C - iOS
- 23. функции в Objective-C IOS
- 24. Очереди в iOS Objective-C
- 25. Использование 3D Touch в моем приложении
- 26. 3D Программирование на Objective-C «Только»
- 27. 3D Touch Peek Swipe Like Mail
- 28. 3D Touch для ярлыков Сбой
- 29. Проблема в переводе C++ из книги Oreilly в Objective-C (3D-программирование для iOS)
- 30. Обнаруживать, когда iOS 3D Touch заглянул (без поп-музыки)
'UITouch' дает вам информацию о силе в через свойство 'force' (iOS9 +), и вы можете захватить текущее событие' UITouch' через любой класс 'UIResponser' (iOS2 +); остальное или то, как вы можете использовать это, ограничено только вашим воображением. – holex
Если кому-то нужен ответ для Свифта, проверьте мой ответ здесь http://stackoverflow.com/a/32593044/4106559 – ooenomel2003