TransformManager (AS3) – Interactively Scale/Rotate/Move DisplayObjects

  • Version: 1.9669, Updated 2013-01-11
  • Compatibility: Flash Player 9 and later (AS3) (AS2 version available)

Description

TransformManager makes it easy to add interactive scaling/rotating/moving of DisplayObjects to your Flash or Flex application. It uses an intuitive interaction style that’s similar to most modern drawing applications. When the user clicks on a managed DisplayObject, a selection box will be drawn around it along with 8 handles for scaling/rotating. When the mouse is placed just outside of any of the scaling handles, the cursor will change to indicate that they’re in rotation mode. Just like most other applications, the user can hold down the SHIFT key to select multiple items, to constrain scaling proportions, or to limit the rotation to 45 degree increments.

(To see a Flex Example, click here.)

Videos

Kor created some great introductory videos that demonstrate how easy it is to get up and running with TransformManager. Check them out here:

Video part 1 Video part 2

Kor wasn’t paid to create the videos; he did it completely on his own. Thanks Kor!

Features

  • Select multiple items and scale/rotate/move them all simultaneously.
  • Includes a “FlexTransformManager” class that makes it simple to integrate into Flex applications.
  • Perform virtually any action (transformations, selections, etc.) through code or interactively.
  • Define bounds within which the DisplayObjects must stay, and TransformManager will not let the user scale/rotate/move them beyond those bounds.
  • Depth management which allows you to programmatically push the selected items forward or backward in the stacking order. By default, the selection is automatically brought to the front of the display list.
  • Optionally set minScaleX, maxScaleX, minScaleY, and maxScaleY as well as minWidth, maxWidth, minHeight, and maxHeight properties on each item.
  • Arrow keys move the selection (optional).
  • You can set the scaleMode of any TransformItem to SCALE_WIDTH_AND_HEIGHT so that the width/height properties are altered instead of scaleX/scaleY. This can be helpful for text-related components because altering the width/height changes only the container’s dimensions while retaining the text’s size.
  • There is a 10-pixel wide draggable edge around around the border that users can drag. This is particularly helpful with TextFields/TextAreas.
  • The DELETE and BACKSPACE keys can be used to delete the selected DisplayObjects.
  • Lock certain kinds of transformations like rotation, scale, and/or movement.
  • Constrain the proportions of the DisplayObjects so that users cannot distort them when scaling.
  • Scale from the DisplayObject’s center or from its corners.
  • Listen for Events like SCALE, MOVE, ROTATE, SELECTION_CHANGE, DEPTH_CHANGE, CLICK_OFF, START_INTERACTIVE_MOVE, START_INTERACTIVE_SCALE, START_INTERACTIVE_ROTATE, FINISH_INTERACTIVE_MOVE, FINISH_INTERACTIVE_SCALE, FINISH_INTERACTIVE_ROTATE, DOUBLE_CLICK, SEIZE_CURSOR, RELEASE_CURSOR, and DESTROY
  • Set the selection box line color and handle thickness.
  • Cursor will automatically change to indicate scale or rotation mode.
  • Customize the the move, scale, and/or rotation cursors and their behavior (like whether or not they replace the mouse, how far they’re offset from the mouse position, whether or not they automatically rotate based on the mouse’s position and define custom Shapes)
  • Attach custom DisplayObjects to the selection box easily with addSelectionBoxElement(). For example, add your own “delete” button that appears to always stay attached to the selection box.
  • Export transformational data for each item’s scale, rotation, and position as well as the TranformManager’s settings in XML format so that you can easily save it to a database (or wherever). Then apply it anytime to revert objects to a particular state.
  • Optionally hide the center handle.
  • VERY easy to use. In fact, all it takes is one line of code to get it up and running with the default settings.

Notes / Limitations

  • All DisplayObjects that are managed by a particular TransformManager instance must have the same parent (you can create multiple TransformManager instances if you want).
  • Objects with their scaleMode set to SCALE_WIDTH_AND_HEIGHT (like TextFields) cannot be flipped (have negative scales), nor can they be skewed. Therefore, when one is part of a multi-selection, scaling will be disabled because it could skew the object (imagine if a TextField is at a 45 degree angle, and then you selected another item and scaled vertically – your TextField would end up getting skewed).
  • Due to several bugs in the Flex framework (acknowledged by Adobe), TransformManager cannot accommodate scrollbars in its container, nor can TextFields be scaled disproportionately and scaleX/scaleY/width/height properties don’t always report properly after updates are made with TransformManager (again, these are bugs in the Flex framework, NOT TransformManager). However, I created a “FlexTransformManager” class that extends Canvas and makes it easy to integrate into Flex applications. Just beware that the DisplayObjects in the FlexTransformManager will be contained within the bounds of the FlexTransformManager.
  • Due to a limitation in the way Flash reports bounds, items that are extremely close or exactly on top of a boundary (if you define bounds) will be moved about 0.1 pixel away from the boundary when you select them. If an item fills the width and/or height of the bounds, it will be scaled down very slightly (about 0.2 pixels total) to move it away from the bounds and allow accurate collision detection.
$299 USD

As always, there’s a 30-day money-back guarantee included. If you don’t like the class and would prefer to forfeit your license and get a refund within 30 days, no problem.

Other links: License | Forums | AS2 version

Documentation

Click here for full ASDoc documentation

Need help building a cropping tool?

Cropping isn’t a feature that is hard-coded into TransformManager because there are many ways to accomplish (user interface, functionality, etc.) but as of August 1, 2011, there is a Crop (and FlexCrop for Flex apps) class included that can serve as a jumping-off point in building your own. Or just use it without any edits. Below you’ll find an interactive cropping example that demonstrates its capabilities:

Important properties

  • constrainScale : Boolean To constrain items to only scaling proportionally, set this to true [default:false]
  • scaleFromCenter : Boolean To force all items to use the center of the selection as the origin for scaling, set this to true [default:false]
  • lockScale : Boolean Prevents scaling [default:false]
  • lockRotation : Boolean Prevents rotating [default:false]
  • lockPosition : Boolean Prevents moving [default:false]
  • arrowKeysMove : Boolean When true, the arrow keys on the keyboard move the selected items when pressed [default: false]
  • autoDeselect : Boolean When the user clicks anywhere OTHER than on one of the TransformItems, all are deselected [default:true]
  • allowDelete : Boolean When the user presses the delete (or backspace) key, the selected item(s) will be deleted (except TextFields) [default:false]
  • allowMultiSelect : Boolean To prevent users from being able to select multiple items, set this to false [default:true]
  • bounds : Rectangle Defines the boundaries for movement/scaling/rotation. [default:null]
  • lineColor : Number Controls the line color of the selection box and handles [default:0x3399FF]
  • handleSize : Number Controls the handle size (in pixels) [default:8]
  • handleFillColor : Number Controls the fill color of the handle [default:0xFFFFFF]
  • paddingForRotation : Number Sets the amount of space outside each of the four corner scale handles that will trigger rotation mode [default:12]
  • enabled : Boolean Allows you to enable or disable the TransformManager [default:true]
  • forceSelectionToFront : Boolean When true, new selections are forced to the front of the display list of the container DisplayObjectContainer [default:true]
  • selectedTargetObjects : Array An easy way to get an Array of all selected targetObjects
  • selectedItems : Array Similar to selectedTargetObjects, but returns the TransformItem instances of the selected items
  • items : Array All of the TransformItem instances that are controlled by this TransformManager (regardless of whether they’re selected or not)
  • targetObjects : Array All of the targetObjects (DisplayObjects) that are controlled by this TransformManager (regardless of whether they’re selected or not)
  • hideCenterHandle: Boolean If true, the center scale handle will be hidden.
  • ignoredObjects : Array Sometimes you want TransformManager to ignore clicks on certain DisplayObjects, like buttons, color pickers, etc. Those items should populate the ignoreObjects Array. The DisplayObject CANNOT be a child of a targetObject.

Events

  • TransformEvent.SELECTION_CHANGE (the TransformEvent’s “items” Array contains any items affected by the selection change – either deselected or selected. to determine which items are selected after the Event, check the TransformManager instance’s selectedItems Array)
  • TransformEvent.MOVE
  • TransformEvent.SCALE
  • TransformEvent.ROTATE
  • TransformEvent.FINISH_INTERACTIVE_MOVE
  • TransformEvent.FINISH_INTERACTIVE_SCALE
  • TransformEvent.FINISH_INTERACTIVE_ROTATE
  • TransformEvent.SEIZE_CURSOR
  • TransformEvent.RELEASE_CURSOR
  • TransformEvent.CLICK_OFF (only called when autoDeselect is false, otherwise the DESELECT event is called)
  • TransformEvent.DELETE
  • TransformEvent.DOUBLE_CLICK
  • TransformEvent.DEPTH_CHANGE
  • TransformEvent.DESTROY

All TransformEvents have an “items” property which is an Array populated by the affected TransformItem instances. TransformEvents also have a “mouseEvent” property that will be populated if there was an associted MouseEvent (like CLICK_OFF)

EXAMPLES

To make two MovieClips (myClip1 and myClip2) transformable using the default settings:

import com.greensock.transform.TransformManager;
var manager:TransformManager = new TransformManager({targetObjects:[myClip1, myClip2]});

To make the two MovieClips transformable, constrain their scaling to be proportional (even if the user is not holding down the shift key), call the onScale function everytime one of the objects is scaled, lock the rotation value of each MovieClip (preventing rotation), and allow the DELETE key to appear to delete the selected MovieClip from the stage:

import com.greensock.transform.TransformManager;
import com.greensock.events.TransformEvent;

var manager:TransformManager = new TransformManager({targetObjects:[myClip1, myClip2], constrainScale:true, lockRotation:true, allowDelete:true, autoDeselect:true});
manager.addEventListener(TransformEvent.SCALE, onScale);
function onScale(event:TransformEvent):void {
	trace("Scaled " + event.items.length + " items");
}

To add myClip1 and myClip2 after a TransformManager has been created, set scale constraints so that myClip2 cannot be scaled below 0.5 or above 1, and then listen for when only myClip1 is selected:

import com.greensock.transform.TransformManager;
import com.greensock.events.TransformEvent;

var manager:TransformManager = new TransformManager();

var clip1Item:TransformItem = manager.addItem(myClip1);
var clip2Item:TransformItem = manager.addItem(myClip2);
clip2Item.setScaleConstraints(0.5, 1, 0.5, 1);

clip1Item.addEventListener(TransformEvent.SELECT, onSelectClip1);

function onSelectClip1(event:TransformEvent):void {
	trace("selected myClip1");
}

Flex example

To make two Images (myImage1 and myImage2) transformable using the default settings:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:transform="com.greensock.transform.*">
	<transform:FlexTransformManager id="myManager" width="500" height="500">
		<mx:Image source="../libs/image1.png" id="myImage1" autoLoad="true" x="100" y="100" />
		<mx:Image source="../libs/image2.png" id="myImage2" autoLoad="true" x="0" y="300" />
	</transform:FlexTransformManager>
</mx:Application>
		

Tips

  • I want autoDeselect on, but I don’t want items deselected when the user clicks on certain buttons or form elements. How can I accomplish that? You have several options. You could have TransformManager ignore particular DisplayObjects using the addIgnoredObject() method, or try this:
    1. Set autoDeselect to false
    2. Add a background Sprite (it could have a transparent fill so that it’s invisible but still clickable)
    3. Add an Event.CLICK listener to that background Sprite that calls your TransformManage’s deselectAll() function.
  • Some fl.controls.* Flash components like TextArea and TextInput act strangely when used with TransformManager – how can I fix this? Due to the fact that these components have certain inconsistencies and quirks, by default the selection box may appear off by about 2 pixels in each direction and the text will scale. However, it is relatively easy to work around these issues by changing their style’s “focusRectPadding” and adding a RENDER event listener that calls drawFocus(false) on your TextArea/TextInput instance. You also need to set the associated TransformItem’s hasSelectableText property to true, like so:
    //add a TextArea instance ("textArea") to the TransformManager instance ("manager")
    var item:TransformItem = manager.addItem(textArea);
    
    //set hasSelectableText to true so that its width/height are altered rather than scaleX/scaleY and the custom cursors don't interfere when hovering
    item.hasSelectableText = true;
    
    //focusRectPadding must be 0 to eliminate the offset
    textArea.setStyle("focusRectPadding", 0);
    
    //listen for the textArea's RENDER event and call drawFocus() in order to work around a problem with the components that can leave an odd focus rectangle in place after scaling
    textArea.addEventListener(Event.RENDER, fixFocusRect);
    function fixFocusRect(event:Event):void {
    	event.target.drawFocus(false);
    }

FAQ

  • What if I want to save the state of a transformed object and then recreate (save and load) it to continue working with it? Can TransformManager accommodate that?
    Absolutely, that’s precisely what the exportFullXML() and applyFullXML() methods are for. You need to handle loading the images/assets on your own, but it’s easy to build a dynamic application around TransformManager. In fact, a huge number of TransformManager users do exactly that.
  • If I purchase TransformManager, do I get access to the raw source code files or just a SWC?
    You get the raw source code. Feel free to tweak it if you want, (just don’t redistribute it).
  • What if I purchase TransformManager but don’t like it? Can I get my money back?
    Of course. I always offer a 30-day money-back guarantee. If you’d like to forfeit your license and get your money back, just e-mail me and I’ll promptly send you the refund.
  • Do you offer discounted pricing for charitable/educational projects?
    Yes I do, depending on the project. Feel free to contact me about your request at info@greensock.com.
  • What are the terms of the license? Is there a multi-user/corporate license available?
    If you would like to use TransformManager in a commercial appication or on a team with multiple developers, all you need to do is get the corporate Club GreenSock membership that corresponds to the number of developers in your organization (including freelancers, consultants, etc. who may get access to the code). See the licensing page for details and answers to frequently asked questions.
  • Can I use TransformManager to transform dynamically-loaded assets?
    Absolutely. Just load your asset, make sure it is fully instantiated, and then use the addItem() method to add it to your TransformManager instance. Keep in mind that all of a TransformManager’s items must share the same parent.
  • Why do you charge for the code? Why not go open source like you did with TweenLite/TweenMax?
    I’ve learned the hard way that it takes a LOT of work to create, enhance, document, distribute, and support open source code. The vast majority of visitors to my blog just take the code and run. It becomes difficult to justify all the time I invest in the open source stuff. TransformManager caters to a very specific audience, and I think that $299 is actually quite a bargain considering the fact that it represents well over $30,000 worth of development time.
  • Can I use TransformManager in Flex?
    Sure! In fact, I created a FlexTransformManager class to make it particularly easy to integrate into Flex applications. Please be aware of the limitations, though (see above). Many customers are using it successfully in Flex applications.
  • I’m a “Shockingly Green” Club GreenSock member, so do I get a discount?
    Yes you do. “Shockingly Green” Club GreenSock members get a 15% discount. If you haven’t received instructions from me yet about how to receive your discount, just e-mail me and I’ll send you a special link.

Need Help?

Feel free to e-mail me a question. Or post your question on the forums.

$299 USD
Author: Jack Doyle
Copyright 2011, GreenSock (This work is subject to the terms here.)
  • Twitter
  • Facebook
  • Digg
  • StumbleUpon
  • del.icio.us
  • Yahoo! Buzz
  • Google Bookmarks
  • RSS
  • LinkedIn
  • Reddit

Comments (53) RSS

Posted by jack on August 22, 2008

Kevin Hoyt from Adobe talks about his experience with TransformManager here:
http://blog.kevinhoyt.org/?p=209

As does Matt Przybylski:
http://evolve.reintroducing.com/2008/10/02/as3/my-as3-transformmanager-experience/

And Erik Hallander:
http://www.erikhallander.com/blog/2008/greensock-releases-transformmanager-a-spectacular-as3-class.html

Posted by Kevin Jones on September 23, 2008

Hey,

Just want to add a little support here. I think for a lot of developers your offering us a short cut for a very fair price. I haven’t bought it yet, however i make good use of your TweenLite and more recently TweenMax open source projects. Its not that we can’t write it ourselves but you’ve done an excellent job with it i on’t see why i should re invent the wheel. The above looks very powerful, when i need a decent transform suite i’l likely be back to pay for it but for now just leaving this as my thanks. Don’t want to be one of ‘those’ developers who take the code and run…. i was…. but now im not? :)

Kevin At Twisted

Posted by Nick on November 15, 2008

Jack,

As always I am blown away by your work.

Contributions by people like yourself to the state of this art we call ActionScripting push the boundaries of the field without a doubt.

Maximum kudos, man.

Posted by Randygland on February 25, 2009

I talked my boss into buying our company a TransformManager licence, and saved many hours development time.. They plugged straight in, with 1 line of code + a few imports. And worked immediately! Awesome.

Thank you GS!

Posted by prabhu on March 5, 2009

I was sceptical to spend $299 for the transform manager.. the money back guarentee from Jack was good idea.. so i went ahead and paid for it. It plugged in very well .. i am using it quite often..

Now i feel its worth every penny.

frankly there is no magic in this library, you will know that when u see the source code. but IT DOES WHAT IT CLAIMS TO DO in a simple and better way.

I would definetely return and pay Jack if he creates any other lib, that could be useful to me and my projects.

Prabhu

Posted by Russell Munro on March 15, 2009

I recently purchased and implemented the TransformManager component I wanted to leave a quick post just to say how pleased I am with it. I know it might seem like a heavy cost outlay, especially considering the abundance of open-source code available, but it really has been value for money. I downloaded it and it just worked, that simple. Anyone “Ummming and Arrghhhing” and weather or not pay the money should know that will be well worth while.

This hearty endorsement is also due to the fact that when I ran into trouble I got a friendly and immediate help from Jack (Mr Greensocks himself) Good customer Service deserves good feedback, so here it is. 5 stars, 2 thumbs up, happy as larry, bob’s your uncle.

Posted by hugo on March 16, 2009

well, reading from the above posts, i was wondering if i could add anything… well, i just bought the transform manager a few days ago, but only today i got the chance to implement it….. simple, quick and no complications (many “big” software makers should look at Jack for inspiration)… this code is just an amazing tool which is well worth every cent. If you are in doubt… don´t be.. Jack is doing an amazing work with and for the AS community, he deserves our respect and thanks!

Posted by Lonnie Ellis on April 21, 2009

Just wanted to say thanks for all the time you’ve put into the TransformManager component. It has saved me a lot of time not having to implement these features myself. I use it in a t-shirt / product customization tool where text / clipart get scaled, rotated and moved. You can see this component in action at:

http://gametimesupply.com/customize/designer.aspx

The support I’ve received has been just as good. I’ve been using TransformManager for over 9 months now and there have been several occasions where I needed help with some feature or needed something added and I’ve always gotten a quick and speedy reply.

Thanks again

Posted by Oliver on June 11, 2009

gs TransformManager indirectly won a favourite website award (FWA.com) with it’s use in the house of the dead poster creator: http://www.overkillpostercreator.com/

Posted by Jacob on September 14, 2009

As a long time fan of TweenLite and TweenMax i didn’t hesitate when i had to decide on purchasing the TransformManager. Since i’ve done a similar solution long time ago i know how much hassle it is to create similar solution. It saved me a lot of time and gave functionality, that i wouldn’t create myself – cause of deadlines. So paying 300$ for scalable, light and easy to use solution is nothing comapring to time and effort i would have to put into development of such a solution. In other words, if you’re developing something for a company it’s always worth it, as it may give you more time for making your applications rock.

Posted by Tom Lous on October 22, 2009

I’ve been using TweenLite and TweenMax for a while now, which was one of the main reasons why I concidered buying this library instead of developing something similar myself for a current project.
And I’ve got to say it’s worth every penny, because it saved me many hours and being able to access the source made the class very insightful.

Posted by Bram Van Damme on October 28, 2009

I would like to share my experience with this great class. At first I was hesitating to purchase it at first but found out I could really use it and boy was I right!

I have been able to use it in several projects and getting it to do what I want has always been quite easy. Thanks to the great support Jack offers you won’t be stuck when you’ve got a question.

Also, the forum has a lot of questions answered that you may have :) so be sure to check that out as well!

The Transformmanager also gets updates in case any bugs or problems are found!

What more can I say that hasn’t already been said? Don’t doubt! Buy :)

Posted by Tommy Kjær Andersen on November 6, 2009

Just finished a site where we use Transformmanager, and it was a great experience. Every time i thought needed to hard code some stuff into it, i found a setting to accommodate my needs.

see the efforts here.
http://design.boconcept.com/usa

a really great tool.

Posted by Ronald van Raaphorst on November 11, 2009

No one can program this functionality as good as fast as you can buy and implement this lib. It took me less than 15 minutes to add it to my application and get all the functionality working. Considering all the time and all the effort you’d have to put in yourself, this lib is a big bang for the buck.

Posted by jloa on December 2, 2009

Really nice class. I just love it. If u had tried to create an analogue, u would know how hard it is to deal with the native Matrix class, how buggy it is.

Posted by Boris on December 11, 2009

Jack, we purchased your TransformManager AS3 classes. Why do you offer a “money-back guarantee”? – Nobody who has tried this awesome peace of software will want one – THEY ARE SOOOOOOO BRILLIANT – YOU TOO

Posted by Steve on February 8, 2010

Jack, I can’t thank you enough for this. When I first saw this I thought “yeah right, there’s no way I’m spending $300 for someone else’s code”. Then I thought about how many hours it would take me to build a version with half the features of yours, and after some simple math, I realized I’d be a fool not to buy this. I wasn’t let down. I got it up and running in less than 10 minutes and it worked flawlessly. The API is very well documented and easy to use, too. It’s been a pleasure using this tool (as well as TweenLite which I just started using too). I’ll be sure to keep tabs on you and your future products. Thanks again!

Posted by valter on June 3, 2010

Hello. You class is really awesome. It’s incridible. It worked perfect to what i’m doing. But there is a small problem.
When I resize an image loaded dynamically its qualy is too poor. Is there someway to get better quality ?

Posted by admin on June 3, 2010

Valter, the image quality issue has nothing to do with TransformManager – it’s just that by default when you load an image dynamically in Flash, “smoothing” is turned off. You must manually enable it. My upcoming LoaderMax system will do that for you by default, but until it’s released, you can use Bitmap(myLoader.content).smoothing = true (on your Loader instance of course). That won’t work if you’re loading the image across domains without a crossdomain.xml file in place, though, due to security sandbox restrictions in Flash. Again, none of this is related to TransformManager.

Posted by Joris on July 9, 2010

Hi,

Your class is genius, we bought it for a project we were working on!
Integrated and adapted the class to serve my needs. Saved me a lot of time!
I only miss one feature: for the SCALE_WIDTH_AND_HEIGHT-scaleMode, there should be a way to set minimum width and height.

Posted by antonio brandao on July 13, 2010

I do agree with the guys that the price is fair! But I also do think, that for this price, the “snapping” feature is missing :)

Posted by Soni on September 3, 2010

Can I rotate and scale MovieClips by slider control using TransformManager?

Posted by Jack on September 3, 2010

Yes, Soni, virtually everything can be done through ActionScript with TransformManager – rotating, scaling, moving, selection, deselection, changing the stacking order, etc. So you could set up a slider that calls TransformManager’s rotateSelection() or scaleSelection() methods and feeds the appropriate parameters to them.

Posted by Erik Hallander on November 8, 2010

I just want to disclaim that I’m not posting this for some sort of exposure, but it’s just an example how easy the transform manager is to use in fairly complex projects. We were originally going to create a similar system of our own but after about an hours worth of scoping it became fairly obvious that the $300 is an absolute killer for the amount of functionality that the library offers.

http://www.designerspark.com.au/design/

Jack’s stuff is flat out reliable. Pay the moolah, it’s worth it ;)

Posted by Tino W. on December 10, 2010

IT’S GREAT!

I’ve just included it in my project for my bachelor thesis and it saved me a looooot of time!!!
It do exactly what it should do and it’s very easy to include!

Great stuff! Thanks a lot Jack!

Posted by Kuba on December 17, 2010

This is a fenomenal tool. When we had a choice of using custom build transform manager and using Greensock libraries, we instantly decided to go with his tool. Saves a lot of time, is well documented and you can always get help from Jack. You can see how it’s been implemented here: http://t-sign.com/cardcreator/

Great stuff!

Posted by Martin Svarrer Christensen on March 2, 2011

Hi, Was just playing around with the demo, and just noticed that:
If you rotate one object.
Then select multiple objects and resize
Then the rotated object gets skewed. Is that intentional? Are there any skewing handles?

Posted by Jack on March 2, 2011

Yes, Martin, that is most definitely intentional. Otherwise, multiple objects couldn’t be accurately scaled together. But you can set lockScale to true on any TransformItem in which case no scaling will be possible when that particular object is selected. And no, there are no skewing handles.

Posted by Martin Svarrer Christensen on March 3, 2011

Hi Jack, It perfectly answered my question. I can see it makes perfect sense. Thank you for your time.

Posted by Sergey on June 2, 2011

Really excellent, but little bit expensive.

Posted by Jack on June 2, 2011

Sergey, I understand your concern about TransformManager being a bit expensive. However, I think that once you try to build a similar tool you’ll see that it’s extremely time-intensive (to do well at least) especially with bounds and multiple selection capabilities. I’ve spent literally hundreds of hours building TransformManager. There are all sorts of little unexpected gotchas and hang-ups that you’ll run into when you attempt to build something similar. I’ve heard from some top-notch developers who tried and after burning tons of hours, they finally gave up and bought TransformManager. They e-mailed me and said $299 is a steal. Best money they ever spent for an ActionScript tool. :) Then again, maybe you’re a much better developer and you could build it in far less time. Keep in mind that if you don’t like TransformManager, you can get a full refund within 30 days of your purchase.

Posted by Joris on June 17, 2011

Love your tool, man! And it keeps evolving, a free Duvel for whoever finds anything on the web that matches this. :)
Convinced my client to buy it, and they did it with a smile. :)
It’s cheap, certainly when you compare it with the time you save.
$299 is less then half my price for a day. :)
I’m currently modifying your class with custom handles. (designers movieclips) and adding snap to grid (scale & move), maybe you can add these too in the future.
Just giving ideas. :)

Keep on the good work!

Posted by Dan on October 11, 2011

Is it possible to save the transformations to a shared object so that when a user starts the file again, all of the transformations are intact?

Posted by Jack on October 11, 2011

Sure, Dan, you can use the exportFullXML() method to capture the state as XML and save it however you want (send it to your server, save it locally, or whatever). Then use applyFullXML() to revert to that state anytime. You’d just need to make sure the same objects are there and named appropriately (as they were when you did the exportFullXML()) for it to work.

Posted by Anders on October 12, 2011

Looks really amazing, but I am having an issue with scaling on a current project we are doing, and unfortunately it doesn’t look like this lib is the answer to our prayers :(
We have some vector ‘frames’ like photoframes, and we would like people to be able to scale these non proportional, but wihtout having the frame become uneven in thickness.
Much like in the example above, if I scale one of the photos there, the white frame/edge/border around the photo gets stretched. Do you have any workaround for this?
Any built in property that I dont know about?

Cheers
Anders

Posted by Jack on October 12, 2011

Anders, that isn’t something TransformManager (or any class) could do for you automatically, but here are a few ideas:

1) Look into the 9-slice scaling feature of Flash. This might give you exactly what you need. You’d just build your Sprites/MovieClips with the correct 9-slice scaling and it would automatically adjust things as TransformManager scales the Sprite/MovieClip

2) Build your own customized Sprite class that scales things internally whenever its scaleX/scaleY/width/height properties are changed. You’d extend Sprite and override the scaleX, scaleY, width, and height setters and inject your customized code in there to counteract the effects of the new dimensions. For example, if scaleX was set to 0.5, you’d double the scale of your top and bottom frame borders internally, thus they’d appear to remain exactly the same thickness.

I hope that helps.

Posted by Bob on October 13, 2011

Does it support the new Text Layout Framework?

var tlf:TLFTextField = new TLFTextField();

We really need this feature please reply asap (we are ready to buy this product).

Thank you for all your hard work, and have a great day.

Posted by Louis Wong on October 17, 2011

Does it work with Flash player 11 ?

Posted by Jack on October 17, 2011

Sure, Louis, TransformManager works in Flash Player 9 and later.

Posted by Jack on October 17, 2011

Sure, Bob, TransformManager works with TLFTextFields.

Posted by PT on November 16, 2011

Transform Manager is great – I’ve just integrated it perfectly into a new iPad app.

Good work Jack!

Paul

Posted by David on January 2, 2012

Is it possible to use this tool, but limit to only one of scale/rotate/move at a time?

i.e. to allow the user to specifically select one of those, and only one of those, for easier use in an environment which doesn’t support rollovers (like iOS/Android)

?

Posted by Jack on January 5, 2012

Sure, David, you can set lockRotation, lockScale, and/or lockPosition anytime to limit things as you please.

Posted by Chuck on April 9, 2012

Does this library handle container snaps such as snap alignment, sticky edges, etc.? If not, do you know any libraries (paid or open source). Thanks!

Posted by Jack on April 9, 2012

No, Chuck, TransformManager doesn’t currently have “snaps” built-in as you described. Maybe in a future release, though. You certainly could implement this feature on your own, though, by listening for MOVE events and running your own custom logic in a handler. I’m not aware of any other tools that offer this feature built-in either. Sorry.

Posted by Rudy Scott on April 15, 2012

Does TransformManager licensing also require you to purchase a corporate license subscription for use in subscription websites or is the $300 one-time fee the only licensing cost?

Posted by Jack on April 16, 2012

Good question, Rudy. The $299 gets you TransformManager (including raw source code) and the right to use it in any project/app/site that is covered by the standard terms of use at http://www.greensock.com/terms_of_use.html which includes even most commercial types of usage. If you want to use it in a multiple-developer environment or in a project/app/site that is resold multiple times (subscription type offerings would fall in that category), you need to get a corporate Club GreenSock membership. That gets you a special commercial license. See the licensing page for more details at http://www.greensock.com/licensing/. And of course the membership gets you a bunch of other bonus plugins and classes too.

Posted by Wayne on August 15, 2012

Jack,

Many thanks yet again for all the help and trust you’ve given me in getting this to work with my application build (and apologies for suggesting there was bugs using this with the TLF framework!)…

If anyone’s in any doubt as to the cost-effectiveness and robustness of this class I’m another to the many above to testify to this.

Really made my day!

Wayne

Posted by Leo on July 1, 2013

Hi,

Is it possible to use TransformManager for mobile apps ( using adobe AIR) ? If yes, how it is possible to use handles for transforming images.

thanks

Posted by Jack on July 1, 2013

Leo, TransformManager isn’t specifically built for touch interactions, no, but you’re welcome to customize it for that.

Posted by Fori on July 26, 2013

Hi Jack,

Have you got any plans releasing a JS version of the transform manager?

Posted by Jack on July 26, 2013

Fori, there are no immediate plans to port TransformManager to JavaScript, but we’ve been asked many times so clearly there’s a need for it. We’ve got our hands full with the animation platform at the moment, but we may revisit the TransformManager port in the future sometime. Thanks for asking.

Posted by Stephan on March 11, 2014

Hi Jack

A Transformation manager in JS would be really really welcome. Especially needs a good textfield transformationmanager.

please please

Stephan

To download the code, you must agree to the following license:

"NO CHARGE" NON-EXCLUSIVE SOFTWARE LICENSE AGREEMENT
-----------------------------------------------------------------------------
PLAIN ENGLISH SUMMARY:

  1. You may use the code at no charge in commercial or non-commercial apps, web sites, games, components, and other software as long as end users are not charged a fee of any kind to use your product or gain access to any part of it. If your client pays you a one-time fee to create the site/product, that's perfectly fine and qualifies under the "no charge" license. If end users are charged a usage/access/license fee, please sign up for a "Business Green" Club GreenSock membership which comes with a comprehensive commercial license. See http://www.greensock.com/club/ for details.
  2. Use at your own risk. No warranties are offered.
  3. Please respect the copyright.

-----------------------------------------------------------------------------

LEGALESE:

This is a legal agreement between you (either an individual or a single entity) and GreenSock, Inc. ("GREENSOCK") for the proprietary GreenSock code known as TweenLite, TweenMax, TweenNano, TimelineLite, TimelineMax, and other copyrighted code that is available for download at http://www.greensock.com (this code and documentation, as well as any updates which may at GREENSOCK's sole discretion be provided to you from time to time, are referred to in this Agreement as "PROGRAM"). By downloading, copying, or otherwise using the PROGRAM, you agree to the terms and conditions of this Agreement. If you do not agree to the terms and conditions of this Agreement, please do not download or use the PROGRAM.

I. LICENSE
A. Subject to the terms and conditions of this Agreement, GREENSOCK hereby grants you a non-exclusive, worldwide, non-transferable right to use the PROGRAM in apps, web sites, games, components and other software applications ("Developed Works") for which the end user is NOT charged any fees. If you would like to use the code in a commercially licensed Developed Work for which end users are charged a fee (either for usage or access), simply sign up for the appropriate "Business Green" Club GreenSock membership at http://www.greensock.com/club/.

II. LIMITATION OF LICENSE AND RESTRICTIONS
A. You agree that you will not sell, rent, or license the PROGRAM's source code or any derivative works thereof to any third party without the prior written consent of GREENSOCK. Distribution of the PROGRAM as part of your Developed Work is acceptable so long as it is used exclusively as a part of your Developed Work. You agree not to modify or delete GREENSOCK'S existing copyright notices located in the source code.

B. You may use, duplicate, and distribute the compiled object code as embedded in Developed Works created by you, either for your own use or for distribution to a third party so long as end users of the Developed Work are not charged a fee for usage of or access to any portion of the Developed Work. Please see http://www.greensock.com/licensing/ for descriptions of Developed Works that qualify for the "No Charge" license.

C. You may make modifications to the source code exclusively for your own use in order to perform bug fixes or other minor edits required to operate the PROGRAM as originally intended.

III. CONSIDERATION
A. The license rights granted to you under this Agreement are at no charge, but only in the following circumstances: If on your own behalf or on behalf of a third party you incorporate the PROGRAM into a web site, app, game, program or any component thereof (collectively, "Developed Work"), which in the case of a web site, must be accessible to internet users without payment of a fee of any kind, and in the case of a software application, game, program or component, neither you nor anyone to whom you distribute the Developed Work charges a user a fee of any kind to use such Developed Work or application, game, program or component into which such Developed Work is embedded. The foregoing shall apply regardless of whether you are paid to create such Developed Work.

B. In the event your intended use of the PROGRAM does not meet the criteria for the "no charge" license rights set forth in the immediately preceding paragraph, then you are not licensed to use the PROGRAM under this Agreement and must license the PROGRAM under GREENSOCK'S separate fee-based Software License Agreement which is granted to "Business Green" Club GreenSock members (see http://www.greensock.com/club/ for details).

C. You may make modifications to the source code exclusively for your own use in order to perform bug fixes or other minor edits required to operate the PROGRAM as originally intended.

IV. TITLE AND OWNERSHIP
A. The PROGRAM is licensed, not sold, and is protected by copyright laws and international treaty provisions. You acknowledge that no title to the intellectual property in the PROGRAM is transferred to you. You further acknowledge that title and full ownership rights to the PROGRAM, including all intellectual property rights therein, will remain the exclusive property of GREENSOCK and you will not acquire any rights to the PROGRAM except as expressly set forth in this Agreement. You agree that any copies of the PROGRAM you make will contain the same proprietary notices which appear on and in the PROGRAM. You agree that GREENSOCK may identify you as a licensee unless you make a written request otherwise. GREENSOCK hereby grants to you the right to disclose that your product, game, software application, component, or other Developed Work makes use of GREENSOCK code (for example, "Powered by TweenLite").

V. DISCLAIMER OF WARRANTY AND LIMITATION OF LIABILITY
A. THE PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. GREENSOCK DOES NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE PROGRAM WILL MEET YOUR REQUIREMENTS OR THAT OPERATION WILL BE UNINTERRUPTED OR ERROR FREE. GREENSOCK shall not be liable for special, indirect, incidental, or consequential damages with respect to any claim on account of or arising from this Agreement or use of the PROGRAM, even if GREENSOCK has been or is hereafter advised of the possibility of such damages. Because some states do not allow certain exclusions or limitations on implied warranties or of liability for consequential or incidental damages, the above exclusions may not apply to you. In no event, however, will GREENSOCK be liable to you, under any theory of recovery, in an amount in excess of $250. Notwithstanding anything else in this agreement, you agree to indemnify GREENSOCK, its assignees, and licensees, and hold each of them harmless from and against any and all claims, losses, damages, and expenses, including legal fees arising out of or resulting from any negligent act or omission by you.

B. GREENSOCK may, at its sole discretion, provide support services related to the PROGRAM, but has no obligation to do so.

VI. TERMINATION
If you at any time fail to abide by the terms of this Agreement, GREENSOCK shall have the right to immediately terminate the license granted herein and pursue any other legal or equitable remedies available.

VII. MISCELLANEOUS
A. This Agreement shall be construed in accordance with the laws of the State of Illinois. In the event of any dispute between you and GREENSOCK with respect to this Agreement, we both agree that if we cannot resolve the dispute in good faith discussion, either of us may submit the dispute for resolution to arbitration with the American Arbitration Association before a single arbitrator using the AAA Rules for Commercial Arbitration. The arbitrator's decision is final and can be enforced in any court with jurisdiction over such matters.

B. This agreement represents the complete and exclusive statement of the agreement between GREENSOCK and you and supersedes all prior agreements, proposals, representations and other communications, verbal or written, between them with respect to use of the program. This agreement may be modified only with the mutual written approval of authorized representatives of the parties.

C. The terms and conditions of this Agreement shall prevail notwithstanding any different, conflicting, or additional terms or conditions which may appear in any purchase order or other document submitted by you. You agree that such additional or inconsistent terms are deemed rejected by GREENSOCK.

D. GREENSOCK and you agree that any xerographically or electronically reproduced copy of this Agreement shall have the same legal force and effect as any copy bearing original signatures of the parties.

Copyright 2006-2013, GreenSock, Inc. Updated 2012-08-28

I'd like to learn how to get bonus plugins, update notifications, SVN access, and more.
To continue, you must agree to the following license: