2016-03-29 2 views
1

私は成功したアプリを完成させました。私はそれをすべてのデバイスサイズと互換性を持たせようとしています。問題は、私がautolayoutメソッドを試してみると、問題が起こるということです。Autolayoutが私の動画を乱す

私は画像を移動しようとしています:それから私は、また下降他の多くの画像を持って、あなたが落下果物をキャッチするために持っているよう

IMAGENAME.center = CGPointMake(IMAGENAME.center.x, IMAGENAME.center.y + 10); 

。今、ここに問題があります。オートレイアウトがオンになっているときに、1つの果物が地面に当たったり、ゲームのバスケットでそれをつかまえたりすると、私が設定した座標に移動するのではなく、当初の位置に移動しますたとえば、このコードを使用します。

if (CGRectIntersectsRect(IMAGENAME.frame, Basket.frame) { 

    IMAGENAME.center = CGPointMake(600, 200); 
} 

これは、画像が表示されるはずの場所ですが、autolayoutはそれを防止します。しかし、私はそれを普遍的なものにしたいのですが、私は "古い方法"をサポートする別のチュートリアルを見つけることができませんので、誰かが私にautolayoutをどうするか教えてもらえませんか?

答えて

0

自動レイアウトを使用している場合は、すべての方法でそれを行う必要があります。
これは、コード内でフレームを操作しないこと(これは.centerが行うことです)を意味します。

Autolayoutを「オンにする」と書いてあります。
ストーリーボードでは意味がありますか?
ストーリーボードの場合、関連する制約のIBOutletプロパティを作成し、ストーリーボードの制約をアウトレット(イメージビューと共に)に接続する必要があります。

とにかく、Autolayoutを使用してコード内でビューを移動するには、制約を使って行う必要があります。
各制約にはコード内で変更できるconstantプロパティがあります。
あなたの場合、xとyで画像を移動するには、2つの拘束(水平1つと垂直1つ)を変更する必要があります。

センターを操作すると便利な場合は、親と垂直の中心に親の拘束で水平の中心を作成することができます。
既存のロジックを大幅に変更しないようにするには、左上/上端(中心ではなく)に応じて制約を設定できます。
constant値は、あなたがIMAGENAME.center = CGPointMake(600, 200);に使うとまったく同じ値と変更する必要がありますこの方法 - あなたのようなものを持っていますこれに代えて:あなたは自動レイアウト有効にした場合

imageHorizontalCenterConstraint.constant = 600; 
imageVerticalCenterConstraint.constant = 200; 
[imageView.superview updateConstraintsIfNeeded]; 
0

動作しません
1. view.frame = CGRectMake(20, 20, 100, 100) 
2. view.center = CGPointMake(150, 50) 

実行する必要があります。 例を視野の中心を変更するには: XIBでビューやストーリーボードに垂直方向に制約を水平方向中央を追加し、センター。これらの制約を.mファイルのIBOutletとして作成します。

更新中心位置は、次のように:

viewCenterHZConstraint.constant = 600; 
viewCenterVTConstraint.constant = 200; 
[self.view updateConstraintsIfNeeded];