开发者

Can I apply a texture to UIToolbar?

开发者 https://www.devze.com 2022-12-24 13:13 出处:网络
I tried doing this: [toolbar setTint:[UIColor开发者_如何学Python colorWithPatternImage:[UIImage imageNamed:@\"thingFromMyBundle.png\"]]];

I tried doing this:

[toolbar setTint:[UIColor开发者_如何学Python colorWithPatternImage:[UIImage imageNamed:@"thingFromMyBundle.png"]]];

but it just ended up black. At first I assumed you weren't allowed to "tint" with a texture, but I've seen apps recently that can do this. Am I missing something?

Thanks.


Add 2 files to your project, call them UINavigationBar-CustomTexture.h and UINavigationBar-CustomTexture.m for example, in those files put this:

.h file:

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

.m file:

#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

Include the .h file where you instantiate your navigation controller. Make your png file 320x44. Depending on your texture, change the tint color of your navigation bar to something like this (to make the buttons on the navigation bar look better):

[self.navigationController.navigationBar setTintColor:[UIColor colorWithHue:0 saturation:0 brightness:0.5f alpha:0.1f]];


Here is how I got around this problem:

_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];

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号