Фоновое изображение панели UINavigationBar через drawRect - проблема с анимацией запроса

StackOverflow https://stackoverflow.com/questions/1619867

Вопрос

Я добавляю пользовательское фоновое изображение в свою панель UINavigationBar, переопределяя drawRect через категорию.

- ( void )drawRect:( CGRect )rect{
    [[UIImage imageNamed:@"navbar.png"] drawInRect:CGRectMake( 0, self.frame.size.height-44, self.frame.size.width, 44 )];
}

Это решение, кажется, работает нормально, пока вы не попытаетесь использовать свойство navigationitem.prompt .Вместо того чтобы выполнять плавную анимацию представления приглашения, он делает это резко.

Есть ли какие - либо предложения о том , как это исправить ?Или альтернативный способ установки фонового изображения.

PS.Я пытаюсь избежать простого добавления фонового изображения в качестве подвида из-за того, как все перестраивается при просмотре push / pop.И я бы не хотел отправлять SUBVIEWTOBACK в viewDidAppear каждого представления.

ТИА!

Редактировать:Я также попробовал метод swizzling , который работал бы нормально, если бы я мог просто позволить своему изображению растягиваться, но поскольку изображение не растягивается, мне нужно выяснить, как использовать анимацию, которая выполняет сдвиг вместо растяжения.

Редактировать:смотрите мой хакерский ответ ниже

Это было полезно?

Решение

Очень "халтурно", но это самое близкое, что я могу заставить его делать то, что я хочу...

В принципе, при использовании метода swizzling простое растягивание изображения у меня плохо получалось, потому что у меня также были закругленные углы.Поэтому вместо этого я сделал углы отдельным прозрачным изображением и добавил его в качестве подвида, чтобы на них не повлияла анимация растяжения.

Итак, моя категория теперь выглядит следующим образом..

#import "UINavigationBar+custom.h"

#define cornersTag 1

@implementation UINavigationBar (UINavigationBarCategory)

-(void)setCornersIfNeeded{
 UIImageView *corners = (UIImageView*)[self viewWithTag:cornersTag];
 if(!corners){
  UIImage *img = [[UIImage imageNamed:@"navbar_corners.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:0];
  corners = [[[UIImageView alloc] initWithImage:img] autorelease];
  corners.frame = CGRectMake(0, 0, self.frame.size.width, img.size.height);
  corners.tag = cornersTag;
  [self addSubview:corners];
 }
}

- (void)customDrawRect:( CGRect )rect{
 [self customDrawRect:rect];
 [[UIImage imageNamed:@"navbar.png"] drawInRect:rect]; 
 [self setCornersIfNeeded];
}

@end

подробнее о методе обжаривания... http://www.cocoadev.com/index.pl?MethodSwizzling и Метод Swizzle на устройстве iPhone

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top