当我使用 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/