7

私はアプリに取り組んでいます。つまり、再利用可能な「フレームワーク」に取り組んでいます。フレームワークが機能したら、喜んで共有します。このアプリ内で、ユーザーはカラーテーマのリストから選択できるはずです。したがって、アプリはUI要素をかなり動的な方法で色付けできる必要があります。

ボタンの場合、すべての色合いが機能するわけではありません。ここでは、適切に色付けされた背景画像を提供する必要があります。ただし、背景画像を1セットずつ用意するのは、2番目に良い方法です。動的で柔軟性が十分ではありません。

最終的に、解決策は、選択された通常の状態に対して1つのモノクロ(グレー)グラデーション画像を提供し、CoreGraphicsまたはOpenGLを使用してプログラムでその画像に色を付けることになります。しかし率直に言って、私はそこからどこから始めればよいのかわかりません。グラデーションはどのように見える必要がありますか?また、プログラムで任意の色に色を付けるにはどうすればよいですか?

UISegmentedControlsにほとんど当てはまりますが、もう少し複雑です。:)UISegementedControlsもカバーする一般的なソリューションは高く評価されています。

4

6 に答える 6

4

horsejockey のコードを使用して UIButton カテゴリを作成しました: https://github.com/filipstefansson/UITintedButton

新しいメソッドは次のとおりです。

-(void)setImageTintColor:(UIColor *)color;
-(void)setBackgroundTintColor:(UIColor *)color forState:(UIControlState)state;
+(void)tintButtonImages:(NSArray *)buttons withColor:(UIColor *)color;
+(void)tintButtonBackgrounds:(NSArray *)buttons withColor:(UIColor *)color forState:(UIControlState)state;
于 2013-10-20T13:37:51.367 に答える
1

これがあなたの質問に対する部分的な答えです。これは私が書いたヘルパーメソッドで、グレースケール画像に色を付けます。

// baseImage is the grey scale image. color is the desired tint color
+ (UIImage *)tintImage:(UIImage *)baseImage withColor:(UIColor *)color {
    UIGraphicsBeginImageContextWithOptions(baseImage.size, NO, baseImage.scale);

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGRect area = CGRectMake(0, 0, baseImage.size.width, baseImage.size.height);

    CGContextScaleCTM(ctx, 1, -1);
    CGContextTranslateCTM(ctx, 0, -area.size.height);

    CGContextSaveGState(ctx);
    CGContextClipToMask(ctx, area, baseImage.CGImage);

    [color set];
    CGContextFillRect(ctx, area);
    CGContextRestoreGState(ctx);

    CGContextSetBlendMode(ctx, kCGBlendModeOverlay);

    CGContextDrawImage(ctx, area, baseImage.CGImage);

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    // If the original image was stretchable, make the new image stretchable
    if (baseImage.leftCapWidth || baseImage.topCapHeight) {
        newImage = [newImage stretchableImageWithLeftCapWidth:baseImage.leftCapWidth topCapHeight:baseImage.topCapHeight];
    }

    return newImage;
}
于 2013-01-24T23:18:22.273 に答える
0

私はあなたが探しているもののようであるSOの質問にあなたを紹介しています、そしてそれは答えを持っています。

iPhoneで透明なPNG画像に色を付ける方法は?

于 2013-01-24T22:28:04.257 に答える