如何以编程方式更改xib文件中的UiImageView

时间:2015-12-21 14:17:45

标签: ios objective-c iphone xcode uiimageview

我正在尝试更改xib文件中的UIImageView,但它似乎无效。我的xib文件带有UIImageView。我将UIImageView链接到我的xib文件。在我的主ViewController中,我调用一个函数来更改xib文件中的UIImageView。我的函数是更改xib文件中的图像

UIView *view = [[[NSBundle bundleForClass:[self class]]loadNibNamed:@"View" owner:self options:nil] firstObject];
[self addSubview:view];
view.frame = self.bounds;
_imageTest.image = [UIImage imageNamed:@"0.png"];

我做错了什么。我搜索堆栈溢出但似乎我找不到我想要的东西。

3 个答案:

答案 0 :(得分:0)

我不确定您是否尝试使用其他UIImageView更改UI<control或控件本身的图像。

要更改UIImage,您只需在viewController类中添加一个插座,然后将图像设置为它。有点像:

[self.yourImageView setImage:[UIImage imageNamed:@"0.png"]]; //and make sure the 0.png file exist in the application bundle.

如果您对更改控件本身感兴趣,那么最好不要创建UIImage。在运行时创建UIImage和另一个控件,并将控件添加到View。

答案 1 :(得分:0)

尝试加载你的xib视图:

public class UnityPlayer extends com.unity3d.player.UnityPlayer {
    private final ConcurrentLinkedQueue<Runnable> jobs = new ConcurrentLinkedQueue<Runnable>();

    public UnityPlayer(ContextWrapper contextWrapper) {
        super(contextWrapper);
    }

    public void addJob(final Camera camera, final int cam, final byte[] data, final int width, final int height) { // execute on opengl thread using jobs
        jobs.add(new Runnable() {

            @Override
            public void run() {
                videoFrameCallback(cam, data, width, height);
                camera.addCallbackBuffer(data);
            }
        });
    }

    @Override
    protected int[] initCamera(int var1, int var2, int var3, int var4) {
        return new int[]{640, 480}; // return width and height of camera
    }

    //    private final native void nativeVideoFrameCallback(int var1, byte[] var2, int var3, int var4); ==> camera id (0 back, 1 front), imagedata, width, height
    private void videoFrameCallback(int var1, byte[] var2, int var3, int var4) {
        try {
            Method m = com.unity3d.player.UnityPlayer.class.getDeclaredMethod("nativeVideoFrameCallback", Integer.TYPE, byte[].class, Integer.TYPE, Integer.TYPE);
            m.setAccessible(true);
            m.invoke(this, var1, var2, var3, var4);
        } catch (Exception e) {
            Log.d(Constants.TAG, e.toString());
        }
    }

    @Override
    protected void executeGLThreadJobs() {
        super.executeGLThreadJobs();

        Runnable job = jobs.poll();
        if (job != null) {
            job.run();
        }
    }
}

并在设置图像的位置放置断点,确保_imageTest不是nil。

答案 2 :(得分:0)

没关系。我已经可以使它工作了。它看起来像我的UIImageView问题。我删除后添加回来的所有工作。感谢大家的帮助。