从另一个类访问 UI 图像

Posted

技术标签:

【中文标题】从另一个类访问 UI 图像【英文标题】:Accessing UI image from another class 【发布时间】:2015-08-11 18:10:45 【问题描述】:

我正在编写一个道路安全应用程序,并且会有很多代码,所以我想我会将每个函数分成一个类。

现在我正在尝试从另一个类设置主 ViewController 的背景,但是它不起作用。这是我尝试过的代码:

-(void)StartBackgroundAnimation

ViewController *MainRoot = [[ViewController alloc] init];
MainRoot.BackgroundViewer.image = [UIImage imageNamed:@"Lunch_Background.png"];
NSLog(@"ok");
 

我所做的是创建了一个名为StartBackgroundAnimation 的函数,并导入了主视图控制器类,并从中创建了一个对象。之后,我将这个类导入到主视图控制器中,我调用了这个函数,但是图像不起作用。

注意:NSLog 完美运行,函数被调用,但图像没有改变。

【问题讨论】:

为每个函数创建一个类绝对没有意义,你会有成千上万个类 我知道,但这是主要问题 :) 当您执行ViewController *MainRoot = [[ViewController alloc] init]; 时,您正在创建该控制器的另一个实例,它不是您正在查看的那个 那么我如何才能从另一个类中更改图像我必须做什么? 没那么容易,你可以在ViewController里面创建一个你想改变的函数,然后从第二个ViewController调用那个函数 【参考方案1】:

如果你真的想将函数存储在不同的类中,只需返回一个 UIImage 并在视图控制器中分配它。

所以在您的自定义类中。

- (UIImage*)backgroundImage
 return [UIImage imageNamed:@"Lunch_Background.png"];

在你的主视图控制器内部:

self.view.backgroundView.image = [instanceofyourclass backgroundImage];

【讨论】:

【参考方案2】:

如果您想从类外部的类中访问数据,通常最好在Objective-C 中使用属性。

// MyClass.h
@interface MyClass : Superclass
@property (strong, nonatomic) UIImage * backgroundImage;
@end

这样,您可以使用类内部的self.backgroundImage 和外部的anotherClass.backgroundImage 来读取/写入属性。

编辑:拼写...

【讨论】:

Hmm.. 您实际上是否将UIImageView 的图像属性设置为backgroundImage?您可以在 .m 中放入一个函数,该函数将在 backgroundImage 属性更改时运行。 -(void)setBackgroundImage:(UIImage *)imagemyImageView.image = image; _backgroundImage = image;。两条线都很重要。第一个将屏幕视图的图像设置为image,第二个更改存储的值。您需要使用对图像视图的引用来更新第一行。

以上是关于从另一个类访问 UI 图像的主要内容,如果未能解决你的问题,请参考以下文章

Qt5从另一个类访问ui [重复]

从另一个线程访问 UI 线程的视图

如何从另一个模块访问测试类以在 junit 测试中使用?

Python Kivy 无法从另一个类访问 id

如何将调色板图像从另一个线程生成到 WPF UI 线程?

Qt GUI 从另一个类访问 MainWindow 的最简单方法