【问题标题】:Adding Background Image into View Controller将背景图像添加到视图控制器
【发布时间】:2013-09-10 13:22:50
【问题描述】:

我尝试在我的应用程序委托中使用此代码,以便将 PNG 图像添加为视图控制器的背景:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[self window] setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"background.png"]]];

    return YES;
}

但我没有运气......视图控制器仍然有白色背景。这段代码有什么问题?

【问题讨论】:

标签: ios objective-c cocoa-touch uiviewcontroller


【解决方案1】:

接受的答案和迈克尔的答案将起作用,但是,正确的方法是改用 UIImageView。它可以根据设备上的不同屏幕尺寸更好地控制调整大小、缩放等。这是一个例子;

首先创建一个 UIImage。

UIImage *backgroundImage = [UIImage imageNamed:@"iphone_skyline3.jpg"];

第二次创建一个 UIImageView。将帧大小设置为父(自己)的帧大小。这很重要,因为不同设备的帧大小会有所不同。根据图像大小,会发生拉伸。接下来将图像分配给视图。

UIImageView *backgroundImageView=[[UIImageView alloc]initWithFrame:self.view.frame];
backgroundImageView.image=backgroundImage;

最后,要将图像保留在所有控件后面,请执行以下操作。如果您将图像设置为应用的背景,这一点很重要。

[self.view insertSubview:backgroundImageView atIndex:0];

【讨论】:

  • 是的,这应该是公认的答案!!非常感谢!
  • 考虑到方向变化(纵向和横向),您也应该在viewDidLayoutSubviews 中设置UIImageView 框架。
【解决方案2】:

您需要为 ViewController 的视图设置背景

在您的 ViewController 中 initviewDidLoad

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

【讨论】:

  • 如果我使用这个代码我得到内存泄漏如何解决这个问题
【解决方案3】:

这是 swift 中的情况:

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor(patternImage: UIImage(named: "background.png"))
}

【讨论】:

    【解决方案4】:

    @hadaytullah 答案的 Swift 4 版本在图像调整方面做了一些改进:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        let backgroundImage = UIImage.init(named: "yourImageNameHere")
        let backgroundImageView = UIImageView.init(frame: self.view.frame)
    
        backgroundImageView.image = backgroundImage
        backgroundImageView.contentMode = .scaleAspectFill
        backgroundImageView.alpha = 0.1
    
        self.view.insertSubview(backgroundImageView, at: 0)
    }
    

    【讨论】:

      【解决方案5】:

      你也可以为 UIViewController 编写扩展以在多个地方使用

      extension UIViewController {
          func setBackgroundImage(imageName: String) {
              let backgroundImage = UIImage(named: imageName)
              let backgroundImageView = UIImageView(frame: self.view.frame)
              backgroundImageView.image = backgroundImage
              self.view.insertSubview(backgroundImageView, at: 0)
          }
      }
      

      【讨论】:

        【解决方案6】:

        在 viewDidLoad 中,我使用:

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

        或者,如果你想在 appDelegate 中进行,我认为可以

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

        然后在 viewDidLoad 中设置背景为 [UIColor clearColor] ?

        【讨论】:

          【解决方案7】:

          如果您的视图控制器具有 tableView/collection 视图,则以下代码将适合您。

           - (void)viewDidLoad
          {
             [super viewDidLoad];
          
             self.tableView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourImage.png"]];
          }
          

          【讨论】:

            【解决方案8】:

            您可以考虑以下我在 swift 3.0 中使用并在 xcode 8 中测试过的解决方案

                // init and image with your pattern image
                var bgUIImage : UIImage = UIImage(named: "yourIamgeName")!
                let myInsets : UIEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0)
                bgUIImage = bgUIImage.resizableImage(withCapInsets: myInsets)
                self.view.backgroundColor = UIColor.init(patternImage:bgUIImage)
            

            结果将是以下图像

            【讨论】:

              【解决方案9】:

              您可以从情节提要中完成。

              添加 UIImageView 并在 Attribute Inspector 中为 Image 属性设置背景图像。

              【讨论】:

                猜你喜欢
                • 2015-08-14
                • 1970-01-01
                • 2018-12-23
                • 1970-01-01
                • 2013-02-16
                相关资源
                最近更新 更多