Core Graphics Vs Images for a custom button

前端 未结 2 1090
再見小時候
再見小時候 2021-02-09 17:55

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?

相关标签:
2条回答
  • 2021-02-09 18:11

    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];
      
    0 讨论(0)
  • 2021-02-09 18:34

    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.

    0 讨论(0)
提交回复
热议问题