2013-12-02 9 views
6

Я пытаюсь установить фоновое изображение для всего приложения, следующих за эти предложениями: set background image for entire iPhone/iPad appУстановить фоновое изображение для всего приложения IOS

Но в IOS 7 (не знает о других версиях) не работает ну вообще. Я создал простой репозиторий, чтобы вы могли лучше понять, что происходит. В переходе есть некоторые сбои.

Когда вы нажимаете на строку в первом представлении, второй вид вставляется в контроллер навигации, но есть странный эффект. Кажется, что прозрачность строк играла в это. Другая проблема - когда вы возвращаетесь к предыдущему контроллеру представления, есть тонкая тень контроллера вида, который выталкивается из стека навигации. Как я уже говорил, вы можете получить то, что я имею в виду, запустив простой проект Xcode.

Repo: https://github.com/socksz/FixedBackgroundImage

Любые идеи? Я уже пытался установить фоновое изображение для каждого контроллера, но это не то, что я хочу, потому что таким образом изображение «перекрывает» предыдущее фоновое изображение, и это не является желаемым эффектом.

Надеюсь, я хорошо объяснил.

EDIT 1

кажется, что проблема возникает из-за способа IOS 7 управляет переходами между двумя контроллерами зрения. Вы находитесь во втором контроллере представления и пытаетесь перейти к предыдущему контроллеру с помощью жестов салфетки, вы можете видеть, что по мере того, как вы начинаете жест, первый контроллер появляется под вторым контроллером (контроллер, который вы видите), и, поскольку UITableViewCell s имеют прозрачный фон, вы уже видите первый контроллер. На самом деле я боюсь, что нет решения. Как жаль, что я не могу иметь фиксированное фоновое изображение без установки фонового изображения на каждом контроллере.

enter image description here

+0

Вы посмотрели на метод 'appearance'' появлениеWhenContainedIn: '? – Popeye

+0

@ Попее для чего? Можете ли вы дать мне более подробную информацию? Благодаря! –

+0

Использование 'appearanceWhenContainedIn:' позволит вам установить внешний вид, чтобы разрешить использовать 'backgroundColor:' для всех 'UITableViews', содержащийся в let, например,' UIViewController class', или вы можете использовать обычные методы внешнего вида для установки 'backgroundImage: 'фон для каждого' UIView' в вашем приложении. – Popeye

ответ

1

Поместите этот код в appdelegate.m методе файл applicationDidFinishLaunching.

UINavigationController *navigationController = [[UINavigationController alloc]initWithRootViewController:rootViewController]; 

    windowBackground=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"background_window.png"]]; 
       windowBackground.frame=CGRectMake(0, 0, 320, 568); 
       [window addSubview:windowBackground]; 
       [windowBackground release]; 

      window.frame = CGRectMake(0, 0, window.frame.size.width,568); 

      [window addSubview:[navigationController view]]; 
      [window makeKeyAndVisible]; 

Добавить этот код в каждый видКонтроллер класса viewDidLoad.

self.view.backgroundColor = [UIColor clearColor]; 
+0

Те же вопросы, что и в моем коде. –

4

Вы просто должны написать только одну строку в
appdelegate.mapplicationdidFinishLaunchingWithOptions файла: метод

[self.window setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"MainBackground.png"]]]; 

и поставить ниже линии в viewDidLoad метод каждого экрана

[self.view setBackgroundColor:[UIColor clearColor]]; 
+0

Это то, что я уже написал в коде. –

+0

Я не знаю, что случилось с вами, но в моем ios7 этот код работает –

+0

Вы пробовали код в репо? Код работает, я имею в виду, что изображение отображается как фон. «Проблема» - это визуальный эффект, когда контроллер push/popping –

0

Запишите этот код - (BOOL) Применение: (UIApplication *) didFinishLaunchingWithOptions приложения: (NSDictionary *) launchOptions метод

UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"YourImageName.png"]]; 
self.window.backgroundColor = background; 
+0

Я уже сделал это. –

7

У меня было требование в качестве iPhone приложение, чтобы установить фоновое изображение страницы на основе предпочтения пользователя.Образом я имел дело с ним было добавить UIImageView с фоновым изображением в качестве вложенного зрения точки зрения, как так -

UIImageView *bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background-image"]]; 
bgImageView.frame = self.view.bounds; 
[self.view addSubview:bgImageView]; 
[self.view sendSubviewToBack:bgImageView]; 

Я клонировал репозиторий Github и добавил выше фрагмент кода в viewDidLoad обоего контроллеры представлений. Я также добавил следующую строку кода в одном методе -

self.tableView.opaque = NO; 

Я закомментирована код в didFinishLaunchingWithOptions, где вы установили цвет фона. С этими изменениями артефакты при навигации между диспетчерами отображаются. Я тестировал с iPhone Retina (3,5 дюйма), а также iPhone Retina (4-дюймовые) симуляторы.

Причина, по которой артефакты видны при навигации по и от ViewController в раскадровке, требует некоторых исследований. Мое предложение может или не может работать для ваших требований, но вы можете попробовать это как решение.

P.S. Метод требует некоторых настроек для ограничений автоопределения.

1

Late пост ...

Если вы используете NavigationController вы можете попробовать переопределяя «получить» часть TopViewController автоматически установить BackgroundColor к изображению. В приложениях мы используем Xamarin, который преобразует из C# в цель C для нас (не уверен в конкретном синтаксисе). В C# он будет выглядеть примерно так в вашем классе NavigationController.

public override UIViewController TopViewController 
{ 
    get 
    { 
    if (base.TopViewController.View.BackgroundColor != "Your Image") 
    { 
     base.TopViewController.View.BackgroundColor = "Your Image"; 
    } 
    return base.TopViewController; 
    } 
} 
2

Я не нашел способ поставить это глобально. Однако вы, вероятно, найдете это полезным для статических/фиксированных изображений (вместо движущихся изображений, которые вы получаете при установке свойства backgroundColor), используйте свойство backgroundView для каждого экрана.

self.tableView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.jpg"]]; 

Я сделал это сам, создавая UtilTableViewController, который делает все тематические и специальные вещи, которые мне нужны, чтобы это сделать, поставив этот код там, то подклассов все мои взгляды. Это не глобально настроенное изображение, но мне нужно только установить его один раз, и все мои TableViews будут использовать его.

0

вы можете установить фоновое изображение через ниже код ... WEW может поместить этот код в методе viewdidload в viewcontroller.m файле

[self.window setBackgroundColor: [UIColor colorWithPatternImage: [UIImage imageNamed: @ "Б.Г. .png "]]];

Смежные вопросы