3

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

下面是一个代码片段,可让您了解我是如何执行此操作的。

    -(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 有更多了解的人对如何解决这个问题有一些智慧的话。谢谢!

4

1 回答 1

0

您可能正在情节提要中使用自动布局(它是 ios6 及更高版本的默认设置)。每当再次布置视图控制器的视图时,这将重置 UI 元素的位置。各种事件都可能导致这种情况,设置图像视图的图像很可能就是其中之一。

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

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

于 2012-11-27T07:45:19.083 回答