現在のバッテリーレベルに基づいて、プレーンなバッテリー画像に別のトリミングされた画像を描画することにより、バッテリーレベルの効果を達成しようとしています。
現時点では、空のバッテリー画像の色を変更することはできますが、新しい画像を切り取って元の画像の上に配置する方法がわかりません。
トリミング方法に関する便利なリンクをいくつか見つけましたが、それらのすべてが画像の左上隅からトリミングされています。左下を出発点として、現在のレベルに応じて高さを設定したいと思います。
また、切り抜いた画像をオリジナルの上に合成したり、重ねたりすることは可能ですか?
これが私の元の画像です。
...そして私が達成しようとしていること
現時点では、このコードを試していますが、
int width = emptyBm.size.width;
int height = fullBm.size.height * level / 100;
UIImage *image = [UIImage imageNamed:@"battery_icon"];
UIImage *image2 = [UIImage imageNamed:@"battery_icon_full"];
CGRect rect = CGRectMake(0, image.size.height-height, width, height);
CGImageRef imageRef = CGImageCreateWithImageInRect([image2 CGImage], rect);
CGImageRef actualMask = CGImageMaskCreate(CGImageGetWidth([image CGImage]),
CGImageGetHeight([image CGImage]),
CGImageGetBitsPerComponent([image CGImage]),
CGImageGetBitsPerPixel([image CGImage]),
CGImageGetBytesPerRow([image CGImage]),
CGImageGetDataProvider([image CGImage]), NULL, false);
CGImageRef masked = CGImageCreateWithMask(imageRef, actualMask);
batteryBackground.image = [UIImage imageWithCGImage:masked];
ただ、CGImageCreateWithImageInRect
トリミングした部分が伸びて使っているので