Можно ли применить текстуру к UIToolbar? - PullRequest
3 голосов
/ 26 марта 2010

Я пытался сделать это:

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

но он просто оказался черным. Сначала я предполагал, что вам не разрешено «подкрашивать» текстуру, но недавно я видел приложения, которые могут это делать. Я что-то упустил?

Спасибо.

Ответы [ 2 ]

8 голосов
/ 26 марта 2010

Добавьте 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]];
2 голосов
/ 03 июня 2011

Вот как я обошёл эту проблему:

</p> <pre><code>_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];

...