How to give swiping precedence over scrolling on mobile?
Terry Judd
terry.judd at unimelb.edu.au
Thu Dec 20 22:05:29 EST 2018
So, it seems like this approach works ok. Turned out there was an addition complication in that the items in my scrolling list are also selectable and I needed to prevent them being toggled on or off during a left/right swipe action. Anyway, this is what I ended up doing...
In the card script...
local pLoc, pTime, pV, pScroll
on touchStart pTouchID
put the mouseLoc into pLoc
put the millisecs into pTime
put the scroll of grp "checkList" into pScroll
put the mouseV into pV
end touchStart
on touchMove pTouchID, pTouchX, pTouchY
put pV-pTouchY into tY
put pScroll+tY into tScroll
set the scroll of grp "checkList" to tScroll
end touchMove
on touchEnd pTouchID
put the mouseLoc into pLoc1
put (item 1 of pLoc)-(item 1 of pLoc1) into tX
put (item 2 of pLoc)-(item 2 of pLoc1) into tY
put the millisecs - pTime into tElapsed
if abs(tX)>100 then # horizontal swipe
if abs(tY)< 50 then # small vertical movement
if tElapsed < 500 then # not too slow
if tX > 0 then
send "mouseUp" to grp "nextBtn"
else
send "mouseUp" to grp "backBtn"
end if
end if
end if
end if
end touchEnd
And in the "checklist" script...
local pX
on mouseDown
put the mouseH into pX
end mouseDown
on mouseUp
if abs((the mouseH)-pX) > 50 then exit mouseUp
# list selection code
end mouseUp
On 21/12/2018 9:18 am, "use-livecode on behalf of Terry Judd via use-livecode" <use-livecode-bounces at lists.runrev.com on behalf of use-livecode at lists.runrev.com> wrote:
Thanks Brahmanathaswami - was thinking about this again last night and in my case I think I might be able to get it to work for me if I just use touchmove (and only track the y delta) for the vertical scrolling and touchend for the swiping, which is for card to card navigation rather than horizontal scrolling.
Regards,
Terry...
On 20/12/2018 11:53 pm, "use-livecode on behalf of Sannyasin Brahmanathaswami via use-livecode" <use-livecode-bounces at lists.runrev.com on behalf of use-livecode at lists.runrev.com> wrote:
Terry, I'm interested in this also.
Get the SivaSiva app ( no space... from iOS and Google Play)
In the Listen Module, with Elanor's help, I tried to set up a "Spotify" UX with categories of audio scroll and up and down, and within on categories, left to right.
I also get, what is a probably the same as you get, a "conflict" between Elanor touch events -- from scrolling left with right and up and down.
In this case we don’t use the mobileScroller at all in mobile, both up and down, left and right, are implement with touch. But I think it is the same thing as you have...
What I am seeing is: when the up and down in active, the left to right touch is disabled. It "kinda" works for the user but is very "clunky". I tried playing with touch startx and y numbers. It gets "worse" as you go down in size.
The script is small enough to put here. Would be nice of this were fixed but I don’t seeing how the engine would do it. It would seem that the pTouchX and pTouchY are managing the scroll independently.
So you try a "swipe" gesture with your thumb that goes "diagonally" that is, changes is location on the both "x" and "y" axes ... the engine is going to focus on say just the "y" cords -- you get an up to down scroll or vice-versa-- but "x" coord are not "seen" and you don't get any left of right behavior -- in you case, a card swipe, in my case a group swipe left to right fails.
Until you stop and "focus" carefully on "x" axes gesture (left to right, or vice versa). then you get you Card/Group swipe horizontally...
on touchStart pTouchID
put empty into sStartX
put empty into sStartY
put the vScroll of grp "all-collections" into sStartYScroll
put the long owner of the target into tHGroup
put the hScroll of tHGroup into sStartHScroll
end touchStart
on touchMove pTouchID, pTouchX, pTouchY
if sStartY is empty then
put pTouchY into sStartY
end if
if sStartX is empty then
put pTouchX into sStartX
end if
// Check for vertical scroll
if pTouchY > (sStartY + 20) or pTouchY < (sStartY - 20) then
set the vScroll of group "all-collections" to sStartYScroll + (sStartY-pTouchY)
else
if pTouchX > (sStartX + 10) or pTouchX < (sStartX - 10) then
// Check for horizontal scroll
put the long owner of the target into tHGroup
set the hScroll of tHGroup to sStartHScroll + (sStartX-pTouchX)
end if
end if
end touchMove
on touchEnd pTouchID
-- code
end touchEnd
on touchRelease pTouchID
-- code
end touchRelease
I wish there was are easy fix...but I suspect "not"
Brahmanathaswami
On 12/19/18, 2:58 PM, "use-livecode on behalf of Terry Judd via use-livecode" <use-livecode-bounces at lists.runrev.com on behalf of use-livecode at lists.runrev.com> wrote:
This is a problem that I have run into before and have never been able to solve satisfactorily. I’m using touchStart and touchEnd handlers to detect the direction and speed of a finger movement and if it is within certain bounds (large enough x, small enough y, and fast enough) then the user can swipe back and forwards through a series of cards. Good so far except when the area they are swiping on also includes a mobile scroller (to scroll a list selection widget/thingy). In that situation the swiping becomes a bit of a hit and miss thing – works sometimes but not others. On iOS there are a few scroller parameters look potentially useful (canCancelTouches, delayTouches, and lockDirection) but it’s not really clear (to me at least) which of these might help and if so whether I should be setting them to true or false.
Any ideas?
Terry...
_______________________________________________
use-livecode mailing list
use-livecode at lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode
_______________________________________________
use-livecode mailing list
use-livecode at lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode
More information about the use-livecode
mailing list