LiveCode is designed to make it relatively simple to create interfaces that will work on both mouse-based desktop platforms and touch screen mobiles devices. This is acheived primarily by simply mapping mouse messages to corresponding touch actions on mobile platforms. There are a few considerations to keep in mind, however, which are summarized here.
There is a whole complement of touch messages that correspond to mouse messages; e.g.:
touchStart | – | mouseDown |
touchEnd | – | mouseUp |
touchMove | – | mouseMove |
touchRelease | – | mouseRelease |
In practice, it seems that many LiveCode developers prefer to simply use the mouse messages and rely on the LiveCode engine to process them properly in the mobile environment. Here's a quote from a message by Jacqueline Landman Gay on the Use-LiveCode mail list:
I used to do it your way -- passing touch messages to mouse messages after checking the environment. When we were writing the teaching stack for the conference, Mark Waddingham [RunRev CTO] suggested we just ditch the touch messages entirely and use only mouse messages. I've been doing that ever since, it works fine. Touch messages are passed to mouse messages automatically, so eliminating them also removes an extra message from the hierarchy and avoids the problem of double messages entirely.
I've seen no differences in response times using only mouse messages.
For more on the touch messages, see LiveCode's Mobile Specific Engine Features article, under the heading "Multi-touch events".
Here is some sample code for a swipe motion to move between cards:
on mouseDown put the mouseH into sStartH end mouseDown on mouseUp if abs(the mouseH - sStartH) > 50 then if the mouseH < sStartH then goNext else goPrev end if end if end mouseUp command goNext lock screen for visual effect go to next card unlock screen with visual effect push left end goNext command goPrev lock screen for visual effect go to prev card unlock screen with visual effect push right end goPrev
There are three messages provided for handling device motion:
motionStart motionType
motionEnd motionType
motionRelease motionType
From the Release Notes for iOS and Android:
At present, the only motion that is generated is "shake". When the motion starts, the current card of the defaultStack will receive motionStart and when the motion ends it will receive motionEnd. In the same vein as the touch events, motionRelease is sent instead of motionEnd if an event occurs that interrupts the motion (such as a phone call).
Here is a simple handler demonstrating how you could handle a shake motion:
on motionEnd pMotion if pMotion is "shake" then cleanup # i.e., call a handler that performs the desired action end if end motionEnd
For more on motion messages, see LiveCode's article on Mobile Specific Engine Features, under the heading "Motion Events".