3

私はこれをやってみました:

[toolbar setTint:[UIColor colorWithPatternImage:[UIImage imageNamed:@"thingFromMyBundle.png"]]];

しかし、それはただ黒くなっただけです。最初は、テクスチャで「着色」することは許可されていないと思っていましたが、最近、これができるアプリを見てきました。何か不足していますか?

ありがとう。

4

2 に答える 2

8

プロジェクトに 2 つのファイルを追加して呼び出します。UINavigationBar-CustomTexture.hたとえばUINavigationBar-CustomTexture.m、これらのファイルに次のように記述します。

.h ファイル:

#import <UIKit/UIKit.h>
@interface UINavigationBar (CustomTexture)
@end

.m ファイル:

#import "UINavigationBar-CustomTexture.h"

@interface UIView (CustomTexture)
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx;
@end

@implementation UINavigationBar (CustomTexture)
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
    if ([self isMemberOfClass:[UINavigationBar class]]){
        UIImage *image = [UIImage imageNamed:@"myImage.png"];
        CGContextScaleCTM(ctx, 1.0f, -1.0f);
        CGContextDrawImage(ctx, CGRectMake(0, -image.size.height, self.frame.size.width, self.frame.size.height), image.CGImage);
    }else{
        [super drawLayer:layer inContext:ctx];
    }
}
@end

ナビゲーション コントローラーをインスタンス化する .h ファイルを含めます。PNG ファイルを 320x44 にします。テクスチャに応じて、ナビゲーション バーの色合いを次のように変更します (ナビゲーション バーのボタンの見栄えを良くするため)。

[self.navigationController.navigationBar setTintColor:[UIColor colorWithHue:0 saturation:0 brightness:0.5f alpha:0.1f]];
于 2010-03-26T06:10:13.307 に答える
2

この問題を回避する方法は次のとおりです。

_titleToolbar= [[UIToolbar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, kDeviceWidth, 34.0f)];
[_titleToolbar setTranslucent:YES];
[_titleToolbar setBackgroundColor:[UIColor clearColor]];

CALayer* backgroundLayer = [CALayer layer];
[backgroundLayer setFrame:CGRectMake(0, 0, kDeviceWidth, _titleToolbar.frame.size.height)];

UIImage* patternImage = [UIImage deviceImageNamed:@"topToolbarBackground"];
[backgroundLayer setBackgroundColor:[UIColor colorWithPatternImage:patternImage].CGColor];
[[_titleToolbar layer] insertSublayer:backgroundLayer atIndex:0];

于 2011-06-02T20:12:53.393 に答える