0

私が作成しているアプリでは、正方形の画像がインポートされ、16 個のタイルに分割され、それらのタイルが画面上の正方形に上から配置されます。ただし、タイルの上の上部に追加の情報バーを追加しているので、一連のタイルを画面のさらに下に移動する必要があります。for ループとコードが作成する座標をいじってみましたが、期待どおりの敬意を払ってくれるものは何もありません。

-(void) initPuzzle:(NSString *) imagePath{
UIImage *orgImage = [UIImage imageNamed:imagePath];

if( orgImage == nil ){
    return; 
}

[self.tiles removeAllObjects];

tileWidth = orgImage.size.width/NUM_HORIZONTAL_PIECES;
tileHeight = orgImage.size.height/NUM_VERTICAL_PIECES;

blankPosition = CGPointMake( NUM_HORIZONTAL_PIECES-1, NUM_VERTICAL_PIECES-1 );

for( int x=0; x<NUM_HORIZONTAL_PIECES; x++ ){
    for( int y=0; y<NUM_VERTICAL_PIECES; y++ ){

        // *** The coordinates need to be altered - ?
        CGPoint orgPosition = CGPointMake(x,y); 

        if( blankPosition.x == orgPosition.x && blankPosition.y == orgPosition.y ){
            continue; 
        }

        CGRect frame = CGRectMake(tileWidth*x, tileHeight*y, 
                                  tileWidth, tileHeight );
        CGImageRef tileImageRef = CGImageCreateWithImageInRect( orgImage.CGImage, frame );
        UIImage *tileImage = [UIImage imageWithCGImage:tileImageRef];

        CGRect tileFrame =  CGRectMake((tileWidth+TILE_SPACING)*x, (tileHeight+TILE_SPACING)*y, 
                                       tileWidth, tileHeight );

        tileImageView = [[Tile alloc] initWithImage:tileImage];
        tileImageView.frame = tileFrame;
        tileImageView.originalPosition = orgPosition;
        tileImageView.currentPosition = orgPosition;


        CGImageRelease( tileImageRef );

        [tiles addObject:tileImageView];

        // now add to view
        [self.view insertSubview:tileImageView atIndex:0];
    }
}

[self shuffle];

}

4

2 に答える 2

0
int topBarWidth = 100;     //100 based on the example in your comment

次に、各タイルのフレームを設定しているコード内のポイントで、topBarWidth以前に設定した y 値に追加します。

于 2012-07-07T00:18:41.550 に答える
0

もう 1 つのオプションは、タイル専用のサブビューを作成し、代わりにそれを再配置することです。次に、すべてのタイルを上下にアニメーション化する場合は、すべての画像の位置を再計算するのではなく、タイル ビューをアニメーション化するだけで済みます。

于 2012-07-07T00:33:31.050 に答える