【问题标题】:Sharing a Background Image Across Multiple View Controllers跨多个视图控制器共享背景图像
【发布时间】:2015-12-28 04:25:40
【问题描述】:

我正在使用 Xcode 在 Swift 中构建一个应用程序。我有一组5 images,我想将其用作所有视图控制器的背景。

我有10+ View Controllers,但我希望能够重复使用这些图像。

通常我会为我的所有视图控制器添加一个图像视图,并设置图像。

我会使用公共变量来更改显示的图像。但是在这个应用程序上,我有很多视图控制器,创建每个图像视图并不是很有效。

有什么方法可以让我做得更快吗?谢谢。

【问题讨论】:

  • 您可以使用容器视图在每个视图控制器中重用相同的图像......或者可以创建一个全局图像变量,可以将其设置为每个视图控制器中的每个图像视图
  • 很多方法,你可以用 .Xib 创建 UIView,然后将其设置为所有 VC 的背景

标签: ios xcode swift background uiimageview


【解决方案1】:

与子类化相比,使用 swift 执行此操作的更好方法是编写扩展并在所有视图控制器中调用您的方法。

extension UIViewController{

func setCustomBackgroundImage(){

    self.view.backgroundColor = UIColor(patternImage: UIImage(named:"yourImageFromXcAssets")!)

    //or

    let bgImage = UIImageView(image: UIImage(named: "yourImageFromXcAssets"))
    self.view.addSubview(bgImage)
}
}

在您的视图控制器中,只需像常规 UIViewController 类方法一样调用它,

class ViewController: UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()
    self.setCustomBackgroundImage()
}

或者用 Objective-C 在 UIViewController 上写一个类别

#import <UIKit/UIKit.h>

@interface UIViewController (customBackground)

- (void)setCustomBackgroundImage;

@end

#import "UIViewController+customBackground.h"

@implementation UIViewController (customBackground)

- (void)setCustomBackgroundImage{
    [self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"yourImageFromXcAssets"]]];
    //or
    UIImageView *bgImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"yourImageFromXcAssets"]];
    bgImage.frame = self.view.frame;
    [self.view addSubview:bgImage];
}

@end

Objective C 也采用同样的方法,

 [self setCustomBackgroundImage]; 

我正在使用视图控制器扩展来管理我的应用中的所有样式、颜色和外观。

【讨论】:

    【解决方案2】:

    使用父 ViewController 子类化所有 10 多个视图控制器。

    @interface ViewController : ParentViewController

    从 ParentViewController 的 viewDidLoad 调用方法。

    // 父视图控制器

    -(void)viewDidLoad {

    [自创背景视图];

    }

    在 createBackgroundView 中,以编程方式创建 UIImageView,并使用公共变量填充它(根据您的要求)。

    在你的 ViewController 的 viewDidLoad 中,调用 [super viewDidLoad];

    // 10 多个 ViewController 之一

    -(void)viewDidLoad {

    [超级viewDidLoad];

    // 其余代码

    }

    【讨论】:

    • 如何创建 ParentViewController?另外,如何确保背景图片位于所有其他项目的后面?
    • 任何 ViewController 都会扩展 UIViewController。所以代替那个,让它扩展ParentViewController。 ParentViewController 将扩展 UIViewController。当您在 viewDidLoad 中定义某些内容时,它会首先被调用。因此,您的 backgroundView 将落后于所有其他视图。如果您愿意,我可以分享示例代码。
    【解决方案3】:

    在一个类中创建一组全局变量:

    class Images {
        static let image1 = UIImage(named: "image1.png")
        static let image2 = UIImage(named: "image2.png")
        static let image3 = UIImage(named: "image3.png")
        static let image4 = UIImage(named: "image4.png")
        static let image5 = UIImage(named: "image5.png")
    
        static var selectedImage = image1
    }
    

    现在选择图像,

    Images.selectedImage = Images.image3
    

    要设置背景,在每个VC中,设置:

    imageView.image = Images.selectedImage
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      相关资源
      最近更新 更多