Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Core Graphics Vs Images for a custom button

Tags:

ios

iphone

When should I go with core graphics over images for making a custom UIButton? Is core graphics faster? Other than resolution independence, are there any other major benefits?

like image 270
midas06 Avatar asked Jun 06 '11 01:06

midas06


People also ask

How does Core Graphics work?

Core Graphics uses what's called a “painter's model”. When you draw into a context, it's almost like making a painting. You lay down a path and fill it, and then lay down another path on top and fill it. You can't change the pixels that have been laid down, but you can paint over them.

What is Core Graphics swift?

Swift Core Graphics. Harness the power of Quartz technology to perform lightweight 2D rendering with high-fidelity output. Handle path-based drawing, anti-aliased rendering, gradients, images, color management, PDF documents, and more.

How do I make a button in SwiftUI?

SwiftUI's button is similar to UIButton , except it's more flexible in terms of what content it shows and it uses a closure for its action rather than the old target/action system. To create a button with a string title you would start with code like this: Button("Button title") { print("Button tapped!") }


2 Answers

Pros of Core Graphics:

  • Code for drawing a button will probably be smaller than an image file.
  • Allows dynamic modification, slight changes without adding a complete second image.
  • As you mentioned, resolution independent.
  • Less memory intensive (doesn't allocate memory to hold every pixel).

Pros of images:

  • Creating the image in an editor will usually be simpler than writing code which draws it perfectly. (If you use anything other than solid colors, it could be much simpler.)
  • The editor will let you see the image beforehand without recompiling.
  • Easier to work with other built in objects (i.e., you can make it the background of a UIButton).

As for running time, I am not sure. I would guess that CG would be faster for simple drawing, where most of the pixels aren't changed, but images would be faster for more complex drawing where most of the pixels are changed (Assuming you use the PNG format, so it gets optomized. Otherwise, CG would probably always be faster).

As a compromise, you could draw into an image once, and use that image for future drawing. This would allow you to get some of the benefits from each.

like image 189
ughoavgfhw Avatar answered Nov 13 '22 05:11

ughoavgfhw


Additional thoughts to ughoavgfhw's comment:

  1. Images can be cached (like when you use [UIImage imageNamed:]). So you even won't use more memory for new buttons, except the first one displayed. (And no allocations, except memory for a new pointer).

  2. You can use stretchable images for button creation, and avoid some (not all and not always) problems with resolution dependence:

    UIImage *myImg = [UIImage imageNamed:@"myImg.png"];
    UIImage *myImgStretchable = [myImg stretchableImageWithLeftCapWidth:10 topCapHeight:10];
    [myButton setBackgroundImage:myImgStretchable forState:UIControlStateNormal];
    
like image 21
kpower Avatar answered Nov 13 '22 05:11

kpower