Всплывающее модальное окно, похожее на Instagram - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь воспроизвести функцию принудительного касания в Instagram, где

1) Положите палец на изображение, и оно станет немного темнее (эффект при наведении курсора, легко)

2) Нажмитенемного сложнее и появляется всплывающий модальный предварительный просмотр контента

3) Нажмите еще сильнее, и он расширяет модальный режим до полного экрана

У меня проблемы с Ionic 4 / Cordova "3d touch"плагин, в котором он не регистрирует принудительное касание, если я сначала регулярно касаюсь экрана.

Другими словами, шаг 2, приведенный выше, не вызывает принудительное касание при прослушивании с помощью threeDeeTouch.watchForceTouches()

Для того, чтобы слушатель сработал, я должен сначала соприкоснуться с силой, без задержки между «прикосновением» к экрану и «нажатием» на экран.Если я касаюсь экрана, но не нажимаю на него, я больше не могу нажать его, чтобы вызвать принудительное касание, не поднимая палец.

Я тестирую на реальном устройстве iPhone X

Как можно обойти эту проблему, чтобы повторить принудительное прикосновение в Instagram?

1 Ответ

0 голосов
/ 31 июля 2019

Я тоже пробовал то же самое в приложении ionic cordova, попробуйте просмотреть это ниже для дальнейшего продолжения

watchForceTouches (): Вы можете получить уведомление, когда пользователь прикасаетсявеб-просмотр.Плагин определяет Force Touch, когда к экрану прикладывается не менее 75% от максимальной силы.Ваше приложение получит координаты x и y, поэтому вы должны выяснить, какой элемент пользовательского интерфейса был затронут.

i Я попробовал этот синтаксис и достиг его путем понижения версии плагина вместе с приведенным ниже набором кодов

    @implementation ForceTouchRecognizer

double lastEvent = 0;

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    for (UITouch* touch in touches) {
        CGFloat percentage = (touch.force / touch.maximumPossibleForce) * 100;
        if (percentage >= 75) {
            // let's not flood the callback with multiple hits within the same second
            NSTimeInterval ts = touch.timestamp;
            int diff = ts - lastEvent;
            if (diff > 0) {
                lastEvent = ts;
                CGPoint coordinates = [touch locationInView:self.view];
                NSMutableDictionary *result = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
                                               [NSString stringWithFormat:@"%d", (int)percentage]   , @"force",
                                               [NSString stringWithFormat:@"%d", (int)coordinates.x], @"x",
                                               [NSString stringWithFormat:@"%d", (int)coordinates.y], @"y",
                                               // no need to use the touch.timestamp really since it's simply 'now'
                                               [NSString stringWithFormat:@"%f", [[NSDate date] timeIntervalSince1970]], @"timestamp",
                                               nil];

                CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:result];
                pluginResult.keepCallback = [NSNumber numberWithBool:YES];
                [_commandDelegate sendPluginResult:pluginResult callbackId:_callbackId];
            }
        }
    }
}
@end
...