3

imageNamed メソッドを使用すると、アプリ内の他のすべての画像がデフォルトの場所にリセットされますが、これは望ましくありません。たとえば、ユーザーが音部記号の新しい場所にドラッグできる音符 (note.png) の画像を含む音部記号があります。音部記号の下には、選択した音符を演奏するために特定の楽器のどこに指を置くべきかを示す画像 (finger.png) があります。そのため、ユーザーがメモ A からメモ B にメモをドラッグすると、imageNamed メソッドを使用して指の画像を "fingerA.png" から "fingerB.png" に変更しようとします。「fingerB.png」が表示されるようになったため、指の画像を変更するのに最適ですが、私のnote.pngは、アプリがロードされたときに開始されたデフォルトの場所に戻されます(この場合、note.pngはnoteAに戻り、 "fingerB.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"];
        }
    }

2行のコードを交換して、最初に指の画像を変更してから、メモの画像の座標を設定しようとしました。また、メモ画像の座標を保存して、後で復元しようとしました。私はアイデアを使い果たし始めており、Objective-C または Xcode の知識が豊富な人がこれを回避する方法についていくつかの知恵を持っていることを望んでいます。ありがとう!

4

1 に答える 1

0

ストーリーボードで Autolayout を使用している可能性があります (ios6 以降のデフォルトです)。これにより、View Controller のビューが再度レイアウトされるたびに、UI 要素の位置がリセットされます。あらゆる種類のイベントがこれを引き起こす可能性があり、画像ビューの画像を設定することはその1つである可能性があります.

Autolayout では、フレームや中心を設定するのではなく、代わりに制約を編集します。おそらく、これを行うよりも Autolayout をオフにする方が簡単です。インターフェイス ビルダーで、ファイル インスペクターを選択し、[use Autolayout] のチェックを外します。

Autolayout を引き続き使用する場合はconstant、フレームを直接設定する代わりに、制約 (x 位置と y 位置) を定義し、それらにアウトレットを作成し、制約のプロパティを編集する必要があります。

于 2012-11-27T07:45:19.083 に答える