Pinch and Rotate
Ken Corey
ken at kencorey.com
Mon Jan 23 18:02:32 EST 2012
Hiya Thomas,
I've been meaning to take a stab at this, and your post got me off my duff.
I've seen a few apps that do multitouch pinch to zoom *really* well. by
that I mean that the pinch can accomplish 3 things at the same time:
scale something
rotate something
move something
The last one makes it feel really slick. Of course, if you only wanted
to do one of those, no problem.
I wanted to build and API with 3 main calls:
pinchStart
pinchMove dDistance, dAngle, dX, dY
pinchEnd
Start and End are for setup/cleanup, and pinchMove is where the work is
done.
I've created a sample script to demonstrate the concept:
http://its.ec/static/multitouchtest.livecode.zip
(I packaged it up this way because there is a image involved.)
This "works" on my iPad. Jerky, but it works.
On my Nexus One, the app is less impressive. Things can move, but when
you try to rotate, the rotation is not uniform. Sometimes it rotates,
sometimes it doesn't, sometimes it goes backwards. *shrug*
It is possible to build a test harness for a desktop in just a few lines
of code, but in this case I pulled them out for brevity. That means
that if you've got an iPad it will work fairly well. My PC nor my Mac
have multi-touch built in, so I don't know how they'd do.
As always, there're flies in this particular ointment:
1) Images can't scale and rotate at the same time. In my demo, the image
will rotate and move, but only when the angle of the image is zero will
it scale...this will appear as "pop" of a larger image.
A horrible work-around could be to use your main image as a template.
Clone it, scale that, take a snapshot of it at the zoomed size and
/then/ rotate that. Ugh. Any better way to skin this one?
2) Graphics can't be rotated natively. I found that only some graphics
even report their points (rectangles, rounded rects, ovals, etc
don't...so you can't rotate them).
The horrible hacky way around that might be to try to implement the
regular polygons using a Polygon, or even a "Freehand Polygon". Maybe.
Then, you could implement a rotation routine for such a Frankenstein
poly. Blech.
3) It's jumpy, big time. Worse come to worse, you could try to build-in
an averaging function, but I was quite surprised how jumpy it all is.
4) Not sure about the Android support.
5) Not even sure where'd you'd use this kind of thing because of uneven
support. Can't use scaling with images. Can't use rotation with
graphics. Both are painfully jerky.
I'm quite a LiveCode newbie, so if anyone has constructive feedback on
my code, or knows a more-runrev kinda way to do things I'd appreciate if
you'd let me (or the list) know.
Thanks,
-Ken
More information about the use-livecode
mailing list