in my app I want to have a light table to sort photos. Basically it’s just a huge view with lots of photos in it and you can drag the photos around. Photos can overlap, they don’t fall into a grid like in iPhoto.
So every photo needs to respond to mouse events. Do I make every photo into its own view? Or are views too expensive to create? I want to easily support 100+ photos or more.
Photos need to be in layers as well so I can change the stacking order. Do I use CoreAnimation for this?
I don’t need finished source code just some pointers and general ideas. I will (try to) figure out the implementation myself.
Fwiw, I target 10.5+, I use Obj-C 2.0 and garbage collection.
Thanks in advance!
You should definitely use
CALayerobjects. Using a set ofNSImageViewsubviews will very quickly become unmanageable performance-wise, especially if you have more than 100 images on screen. If you don’t want to use Core Animation for some reason, you’d be much better off creating a single custom view and handling all the image drawing and hit testing yourself. This will be more efficient than instantiating manyNSImageViewobjects.However, Core Animation layers will give orders of magnitude improvement in performance over this approach, as each layer is buffered in the GPU so you can drag the layers around with virtually zero cost, and you only need to draw each image once rather than every time anything in the view changes. Core Animation will also handle layer stacking for you.
Have a look at the excellent CocoaSlides sample code which demonstrates a very similar application to what you describe, including hit testing and simple animation.