Page 1 of 1

Help with touchmove

Posted: Mon May 12, 2025 3:49 am
by jameshale
Hi,
I am trying to enable a swipe to the right on a locked field to activate an action.
I have used the following code:

Code: Select all

local sLastX, pID

on touchStart pTouchData
   put pTouchData into pID
end touchStart

on touchMove pTouchID, pTouchX, pTouchY
   put pTouchID into pID
   -- sLastX[pTouchID] will be empty when the first move
   -- message for pTouchID is sent
   if sLastX[pTouchID] is empty then
      put pTouchX into slastX[pID]
   end if
   if pTouchX > (slastX[pID] +10) then 
      swipeRight
      breakpoint
   end if
end touchMove

on touchEnd pTouchData
   delete variable slastX[pID]
end touchEnd

Nothing happens when I try this in the simulator.
Not even the breakpoint is activated (although that might be an issue with breakpoints)
I guess I am having trouble understanding the touchmove message.
There are examples of pinch decoding given in lessons and the forum but no examples of a simple swipe.

Can anyone help my aged brain with this?

James

Re: Help with touchmove

Posted: Mon May 12, 2025 4:19 pm
by andresdt
He modified your code a bit:

Code: Select all

local sLastX, sTouchID

on touchStart pTouchID
	/* Stores the id of the first touch, since each touch generates an id */
	if sTouchID is not an integer then
		put pTouchID into sTouchID
	end if
end touchStart

on touchMove pTouchID, pTouchX, pTouchY
	if pTouchID is not sTouchID then
		exit touchMove -- or  pass "touchMove"
	end if

	if sLastX[pTouchID] is empty then
		put pTouchX into sLastX[pTouchID]
	else if 10 < abs(sLastX[pTouchID] - pTouchX) then 
		swipeRight
		breakpoint
	end if
end touchMove

on touchEnd pTouchData
	delete variable sLastX[pTouchID]
end touchEnd
I hope this helps.
I can also recommend that you take a look at the extension:
https://livecode.com/extensions/mobile-gestures/1-0-0/
The source code for that extension is at:
https://github.com/Ferruslogic/touchGestures
I hope this can help you in some way.

Re: Help with touchmove

Posted: Tue May 13, 2025 2:57 am
by jameshale
Thanks.
Interestingly it works once, that's it.
One swipe and then no more.
??

Will explore further.

Re: Help with touchmove

Posted: Tue May 13, 2025 7:57 am
by jameshale
Getting each handler to write to a field shows me:
touchStart is triggered
touchMove is not
Tested in Simulator AND my iPad
??

Re: Help with touchmove

Posted: Wed May 14, 2025 6:47 am
by jameshale
OK Got it working.
I realised that as I only wanted to act at the end of the swipe putting my decision tree in the TouchMove handler would be confusing, given that it continues to be called during the swipe.
So I placed it in the TouchEnd where I want the action triggered.

Code: Select all

local sLastX,sLastY, sTouchID,sfinalx,sfinaly

on touchStart pTouchID
   /* Stores the id of the first touch, since each touch generates an id */
   if sTouchID is not an integer then
      put pTouchID into sTouchID
   end if
end touchStart

on touchMove pTouchID, pTouchX, pTouchY
   if sLastX[pTouchID] is empty then
      put pTouchX into sLastX[pTouchID]	
      put pTouchY into sLastY[pTouchID]	
   end if
   put pTouchX into sfinalx
   put pTouchY into sfinalY
end touchMove

on touchEnd pTouchID
   --   if (sLastY[pTouchID] +10) < sfinalY then
   --      -- code
   --      swipeUP
   --   else if (sLastY[pTouchID] +10) > sfinalY then
   --      -- code
   --      swipeDown
   if (sLastX[pTouchID] +10) < sfinalx then
      -- code
      swipeRight
   else if (sLastX[pTouchID] +10) > sfinalx then
      -- code
      swipeleft
   end if
   delete variable sLastX[pTouchID]
end touchEnd
shipwright and swipe left ad handlers to do what I want,

One curious thing though, you will notice I had a swipeUp and SwipeDown handler that are now commented out.
What ever value for the condition I entered, the if statement would only ever do the Up (only the first time) or Down actions, no matter which way I swiped.
I did view the appropriate values and it should have worked, but alas no.
Given I really only wanted the left and right swipes (up and down were just bonuses) I am simply happy it worked.