web-dev-qa-db-ja.com

UISwipeGestureRecognizerおよびShareExtension:iOS 12.4および13.0以降での動作の違い(バグまたはドキュメント化されていない?)

共有拡張機能を作成していますが、iOS 13.0以降でのテスト中に奇妙な動作に直面しました。私はISwipeGestureRecognizerを使用して、拡張機能のメインビューでのユーザーのスワイプジェスチャーを解釈します。

この単純なコードは、私が望む例として以下を提供し、12.4以前で完全に動作します。

@interface ShareAndSwipeRootController ()
@end

@implementation ShareAndSwipeRootController

- (void)loadView {
    [super loadView];

    [self.view setBackgroundColor:[UIColor redColor]];
    [self.view setUserInteractionEnabled:YES];

    UISwipeGestureRecognizer *swipeUpGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUp:)];
    swipeUpGestureRecognizer.direction = UISwipeGestureRecognizerDirectionUp;
    [self.view addGestureRecognizer:swipeUpGestureRecognizer];

    UISwipeGestureRecognizer *swipeDownGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeDown:)];
    swipeDownGestureRecognizer.direction = UISwipeGestureRecognizerDirectionDown;
    [self.view addGestureRecognizer:swipeDownGestureRecognizer];

 };

-(void) swipeUp:(UISwipeGestureRecognizer *)recognizer {
    NSLog(@"SWIPE Up");
}

-(void) swipeDown:(UISwipeGestureRecognizer *)recognizer {
    NSLog(@"SWIPE Down");
}

@end

IOS 13.0以降では、何もログに記録されません。 iOSシミュレーターで対応するバージョンの違いを確認する場合があります。

おそらく誰かがこの問題を解決し、その理由が何であるかを知っているか、その説明を見つけました-結果を共有してください。

ありがとう。

3
Vladislav

Vlad、そのコードは私のシミュレーターとデバイス(13.5)で正常に動作しますが、別の方法で実行することをお勧めします。

loadViewを実装するのは少し重いです。実装する場合は、このメソッドでsuperを呼び出さないでください。

コードをそのままviewDidLoadに移動して、通常はジェスチャーをアタッチしませんか? loadViewを削除して実行

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.view setBackgroundColor:[UIColor redColor]];
    [self.view setUserInteractionEnabled:YES];

    UISwipeGestureRecognizer *swipeUpGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUp:)];
    swipeUpGestureRecognizer.direction = UISwipeGestureRecognizerDirectionUp;
    [self.view addGestureRecognizer:swipeUpGestureRecognizer];

    UISwipeGestureRecognizer *swipeDownGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeDown:)];
    swipeDownGestureRecognizer.direction = UISwipeGestureRecognizerDirectionDown;
    [self.view addGestureRecognizer:swipeDownGestureRecognizer];

 };
0
skaak