Selecting a custom QGraphicsItem by its outline - resize

What is the best way to resize a QGaphicsItem by grabbing its outline with the mouse and dragging. The program has a number of Qgraphicsitems on the scene and these can overlap or be inside one an other. The items are transparent drawing objects like rectangles, lines and circles.
I would like to be able to only select on the items border/outline. Is this possible?
Thanks

Related

How to create legends with triangular end boxes in arcGIS?

I simply want my legend which is now in the form of the left bar in the following image, to be shown in the form of the bar in the right side. I couldn't find anything related for arcGIS. those anyone know?
Thank you so much for your help.
Unfortunately I don't think there is an elegant way to do this, only a work-around:
In Layout View, convert the legend to graphics. (Make sure your data and legend are in their final product state as your legend will no longer be dynamically linked to your data).
Right-click on the legend and ungroup the elements in the legend. Repeat as many times as necessary in order to be able to select an individual rectangle.
Manually convert the two rectangles into triangles. One way to do this would be to activate the "Draw" toolbar and draw white polygons over parts of each rectangle.
Once finished, regroup everything.
Again, not the prettiest solution but I don't believe ArcMap has this functionality.
Good luck!
Tom

Too many UIViews causes lag

I am creating an app for practice that is a simple drawing app. The user drags his/her finger along the screen and it colors in a 100px x 100px square.
I currently achieve this by creating a new colored UIView where the user taps, and that is working. But, after a little time coloring in, there is substantial lag, which I believe is down to there being too many UIViews as a subview of the main view.
How can I, and others who similarly create UIViews on dragging a finger reduce the lag to none at all, no matter how many UIViews there are. I also think that perhaps this is an impossible task, so how else can someone like me color a cube of the size stated above in the main view on a finger dragged along the screen?
I know that this may seem like a specific question, but I believe that it could help others understand how to reduce lag if there are a very large amount of UIViews where a less performance reducing option is available.
One approach is to draw each square into an image and display that image, rather than keeping around an UIView for each square.
If your drawing is simple enough, though, you can use OpenGL to do this, which is much faster. You should look at Apple's GL Paint Sample Code which shows how to do this in OpenGL.
If your drawing is too complex for OpenGL, you could create, for example, a CGBitmapContext, and draw each square into that context when the user drags their finger. Whenever you draw a new square into that bitmap, you can turn the bitmap into an image (via CGBitmapConxtextCreateImage) and display that image an a UIImageView.
There are two things that come to my mind:
1- Use Instruments tool to check if you are leaking any memory
2- If you are just coloring the views than instead of creating images for each of them, either set the background color property of UIView or override the drawRect method to do custom drawing
I think what you are looking for is the drawRect: method of UIView. You could create your custom UIView (you propably have that already) and override the drawRect method and do your drawing there! You will have to save your drawings in an array or another container and call the setNeedsDisplay method whenever the array content is changed.

iOS: Drawing a Rectangle on an ImageView and Adjusting Borders

Attached 1 is a screenshot from an app called GeniusScan where you can photograph any document and an adjustable rectangular grid shows on the imageview. You can easily adjust the borders of the grid with your fingers to select the portion of the image that you want to scan. It will be then transformed into the correct prospective.
1- How can I draw and interact with the grid on the imageview?
2- How can I return the corner points of the grid to my view controller.
Update: I found a wonderful class called BJImageCropper which allows to use fingers to ajust the borders, but only for a box like rectangle. Can anyone suggest how it can be updated to support shapes like in the GeniusScan app?
Dude:
I created a demo that solves both questions:
1- How can I draw and interact with the grid on the imageview?
By Adding 4 views that will act as interactive control points by adding UIPanGestureRecognizer and then drawing the grid using CAShapeLayer on top of your view.
2- How can I return the corner points of the grid to my view controller.
You must keep references to the four control points of your grid.
Here's the link to my code.
This isn't actually drawing on top of UIImageView. It's actually an overlay (view) on top of the UIImageView. You need to keep track of 4 points (have 4 views as subview of the layer), track their positions, once moved, use drawRect: to draw lines based on the 4 points.
The way I've implemented it in my app is, I overlay the UIImageView with a transparent 'SelectionView' (a custom view that I wrote). The selectionView contains 4 custom subview of class 'Vertex'. The vertex talk back to the selectionView via protocol method every time user touches/moves it (it's actually not important which vertex moved, just that it moved):
- (void)vertexMoved:(Vertex *)vertex;
Then the selectionView knows that it needs to re-draw, so it calls setNeedsDisplay which calls internally calls drawRect (you should never call drawRect) where I do the actual drawing of the bounding rect. Basically, iterate through each vertex and draw a line using Quartz APIs and fill it with semi transparent/hollow color.
This is how I am doing it atleast, I am sure there are other ways.

Cocos2d-iphone animating transition from one frame to another

Is it possible to make animation for one sprite, that one frame fades out so another one is visible? It's like creating two sprites on the same position and the one that is on top looses its opacity. I would like rather to operate on one sprite with two frames than with two sprites.
Thanks for any advice!
A sprite can only display one "frame". For your requirements you have to use two sprites, there's no way around that. After all you're displaying two images at the same time, one fading out, the other fading in.

Resizing a component added to the canvas by dragging along the edge

I am developing an application where I need to place rectangular slabs of different shapes to create the shape of a Bench Top. I am placing the rectangular slabs of different shapes(I am using a the Canvas container as the slab) in a repeater and dragging them on the main canvas. One functionality that needs to be implemented is the ability to resize these slabs once the are dragged from the repeater into the drawing canvas by dragging along their edges like we resize the windows that we normally see. Is there any way this can be done.
I just found an component developed for the purpose
http://www.rogue-development.com/objectHandles.html
I am going to check it out.
Please inform if anyone has any other solutions.