установить фоновое изображение для всего приложения iPhone / iPad


У меня есть одно изображение, которое я хочу в качестве фона для моего приложения независимо от того, какой viewcontroller они включены - как вы этого достигаете?

8 59

8 ответов:

вот как вы устанавливаете фон для изображения:

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Background.png"]];

Edit: чтобы написать то, что сказал Феликсыз (и благодаря Мэнни), сделайте это в своем делегате:

window.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Background.png"]];

и в каждом представлении вы хотите, чтобы изображение, этого:

self.view.backgroundColor = [UIColor clearColor];

зависит от того, какой интерфейс вы. С вкладками? Навигация на основе? Но общий ответ: добавьте UIImageView в свой UIWindow перед / под вашим основным видом. Затем сделайте каждый вид, обрабатываемый вашим контроллером основного вида, прозрачным фоном. Трудно дать более конкретный совет, не зная, используете ли вы IB или нет, или как выглядит ваша иерархия представлений.

в моем приложении я установил цвет фона по умолчанию. Может быть, вы можете сделать это с вами фоновое изображение:

1.: Установите цвет фона вашего UIWindow в вашем AppDelegate:

window.backgroundColor = [UIColor myBackgroundGray]; // own Category

2.: А теперь сделайте все остальные представления прозрачными:

self.view.backgroundColor = [UIColor clearColor]; // = transparent

в вашем AppDelegate в

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

добавьте следующую строку :

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

после того, как вы просто должны установить вид фона для [UIColor clearColor];

Я не уверен в последствиях для производительности, но мне нужно было выполнить что-то подобное, и в итоге я использовал UIImageView, который хорошо работает (в C#, но работает одинаково в obj-c):

//Add the view controller first, to ensure proper order of views later.
Window.RootViewController = new UIViewController();

//create backdrop image view
var imageView = new UIImageView(Window.Bounds);
imageView.Image = UIImage.FromBundle("backdrop.jpg");

//insert into window.
Window.InsertSubview(imageView, 0);

Это не обрабатывает изменения ориентации, но в моем случае, позволило мне добавлять эффекты движения на фоне (например, параллакса).

ваш фон является свойством любого объекта, наследующего представление. Например, метки, кнопки, контроллеры и окно приложения имеют фон. Если вы хотите, чтобы он был полностью bg для всего приложения, вы должны подняться по пути в своих контроллерах, чтобы найти самый "верхний" (нижний) вид и установить его фон, чтобы быть желаемым изображением.

просто называем это assignbackground in viewDidLoad

override func viewDidLoad() {
assignbackground()
}

func assignbackground(){
        let background = UIImage(named: "background")

        var imageview : UIImageView!
        imageview = UIImageView(frame: view.bounds)
        imageview.contentMode =  UIViewContentMode.ScaleAspectFill
        imageview.clipsToBounds = true
        imageview.image = background
        imageview.center = view.center
        view.addSubview(imageview)
        self.view.sendSubviewToBack(imageview)
    }

Я обычно использую эту функцию, чтобы избежать перекрытия с навигационной панелью на iphone.

-(void)setImageBackground:(NSString*)imageName{
    UINavigationController* navigationController = [self navigationController];
    float height = navigationController.toolbar.frame.size.height;
    CGSize size = self.view.frame.size;
    size.height = size.height;
    UIGraphicsBeginImageContext(size);
    CGRect bounds = self.view.bounds;
    bounds.origin.y = bounds.origin.y + height;
    bounds.size.height = bounds.size.height-height;
    [[UIImage imageNamed:imageName] drawInRect:bounds];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    self.view.backgroundColor = [UIColor colorWithPatternImage:image];
}