简体   繁体   中英

Multitouch swipe gesture

How can I simulate a two-finger left-to-right swipe within a UITextView in UIAutomation?

I've tried this:

var textView = target.frontMostApp().mainWindow().textViews()[0];
textView.dragInsideWithOptions({
    touchCount:2,
    startOffset:{x:0.2, y:5.80},
    endOffset:{x:0.8, y:5.80},
    duration:1.5
});

But apparently it is not having any effect. Sometimes it looks like it is doing only one finger gesture even I am passing 2 as the touch count.

One concern is: How UIAutomation knows where place the second touch? I am only specifying the start and end of one touch, not two. Is this correct? Maybe this is the origin of my problem?
Also, I have not very clear the coordinates system of objects. Unless I pass very small values for x, y I usually get warnings: out of bounds . Passing coordinates I would usually pass using Objective-C seem to be way large :(

A very late answer... I met your problem today, in 2015, and I have the chance to have Apple doc for this function. Wasn't the case in 2012 perhaps...

Apple docs says :

You can use offsets to achieve finer precision in specifying the hitpoint within the rect for the specified element. The offset comprises a pair of x and y values, each ranging from 0.0 to 1.0. These values represent, respectively, relative horizontal and vertical positions within the rect, with {x:0.0, y:0.0} as the top left and {x:1.0, y:1.0} as the bottom right. Thus, {x:0.3, y:0.6} specifies a position just below and to the left of center, and {x:1.0, y:0.5} specifies a position centered vertically at the far right.

This example performs a slow drag within the target element from left edge to right edge, just below the top:

target.dragInsideWithOptions({startOffset:{x:0.0, y:0.1}, endOffset:{x:1.0, y:0.1}, duration:1.5});

So x and y values are relative within the rect you choose. In your example :

startOffset:{x:0.2, y:5.80}

You begin the swipe from left in the textview at 20% of its length, and y is 5.80 times beyond the border...

It would better work with values as :

startOffset:{x:0.0, y:0.1}, endOffset:{x:0.5, y:0.1}

For my part, I made the two-finger left-to-right swipe work with this code :

target.frontMostApp().mainWindow().dragInsideWithOptions({touchCount:2, startOffset:{x:0.0, y:0.1}, endOffset:{x:0.5, y:0.1}, duration:1});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM