objective-c - Xcode Objective-C : Why does UIImage imageNamed method reset all other images to default locations?

标签 objective-c xcode

当我使用 imageNamed 方法时,它会将我应用程序中的所有其他图像重置回它们的默认位置,这是我不希望发生的。例如,我有一个带有音符图像 (note.png) 的音乐谱号,允许用户将其拖动到谱号上的新位置。谱号下方是一个图像 (finger.png),显示您的手指应该放在给定乐器上的位置以演奏选定的音符。因此,当用户将笔记从笔记 A 拖到笔记 B 时,我尝试使用 imageNamed 方法将手指图像从“fingerA.png”更改为“fingerB.png”。它非常适合更改手指图像,因为现在显示“fingerB.png”,但我的 note.png 被移回应用程序加载时开始的默认位置(在这种情况下,note.png 回到 noteA 和显示“fingerB.png”,即使 note.png 被硬编码为转到将其放置在 noteB 位置的坐标。

下面的代码片段可以让您了解我是如何做到这一点的。

    -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
    {
        //location.y is where the user stopped dragging the note
        int yloc = location.y; 
        if(yloc > 40 && yloc <=80)
        {
            //noteImage is just the note.png that is being move on clef
            noteImage.center = CGPointMake(120,60);
            fingerImage.image = [UIImage imageNamed:@"fingerB.png"];
        }
    }

我尝试交换两行代码并先更改手指图像,然后再设置音符图像的坐标。我也试过保存笔记图像的坐标并在以后恢复它们。我已经开始没有想法了,我希望对 Objective-C 或 Xcode 有更多了解的人对如何解决这个问题有一些智慧的话。谢谢!

最佳答案

您可能在 Storyboard中使用了自动布局(这是 ios6 及更高版本的默认设置)。每当 View Controller 的 View 再次布局时,这将重置 UI 元素的位置。各种各样的事件都可能导致这种情况,设置 ImageView 的图像很可能就是其中之一。

使用自动布局,您无需设置框架或中心,而是编辑约束。关闭自动布局可能比这样做更容易 - 在界面生成器中,选择文件检查器并取消选中“使用自动布局”。

如果你想继续使用自动布局,你需要定义约束(x 位置和 y 位置),为它们创建导出并编辑约束的 constant 属性而不是设置框架直接地。

关于objective-c - Xcode Objective-C : Why does UIImage imageNamed method reset all other images to default locations?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13559858/

相关文章:

objective-c - 在 10.9 上打开一个表

ios - 为什么解雇ViewControllerAnimated : completion: method can't dealloc view controller

ios - 无法构建调试方案 - Apple Mach-O 链接器错误。链接器命令失败,退出代码为 1

ios - 如何以编程方式制作呈现新 Storyboard 的标签栏?

IOS - 从 IOS 应用程序中的另一个类写入 UITextField

iphone - 在 coregraphics 中添加投影 - 超出上下文范围?

ios - Objective C - UI 列表高度

c - 如何在 Xcode 中获取 "Windows.h"和 "conio.h" header 以用于 C 程序?

ios - 自定义键盘出现约 5 秒延迟

ios - 是否可以在 Xcode 中加载包含 swift 类的资源文件夹的内容?