1

iOS プログラム内でメトロノーム イメージを描画する関数を次に示します。ロードすると、メトロノームの画像がロードされますが、画面の左上から目的の位置まで「飛んで」しまいます。これは私が望んでいた動作ではありません。目的の位置に画像を表示したいだけです。なぜこれが起こるのか、そしてそれを修正する方法を教えてもらえますか? よろしくお願いします。

橋脚。

- (void) drawMetronomeForBeat: (int) beatNumber withNumberOfBeats:(int) noBeats
{

// remove any previous instances first
if (metronomeImageView) 
{
    [metronomeImageView removeFromSuperview];
}

NSString * imageName = @"metronome";
NSString * noBeatsStr = [NSString stringWithFormat:@"%d", noBeats];
NSString * beatNumberStr = [NSString stringWithFormat:@"%d", beatNumber];
imageName = [imageName stringByAppendingString:noBeatsStr]; 
imageName = [imageName stringByAppendingString:@"b"]; 
imageName = [imageName stringByAppendingString:beatNumberStr]; 

UIImage* image = [UIImage imageNamed: imageName];
UIImageView * symbolImageView = [[UIImageView alloc] initWithImage:image]; 

[symbolImageView setFrame:CGRectMake(410.0f, 215.0f, symbolImageView.frame.size.width, symbolImageView.frame.size.height)];
metronomeImageView = symbolImageView; 
[self.view addSubview:symbolImageView];
}
4

2 に答える 2

0

この行を置き換えます

[symbolImageView setFrame:CGRectMake(410.0f, 215.0f, symbolImageView.frame.size.width, symbolImageView.frame.size.height)]; 

[symbolImageView setFrame:CGRectMake(410.0f, 215.0f, 22, 22)];  //Change 22, 22 according to size that you need.

表示している「実像」のサイズに応じて、画像ビューが大きくなったり小さくなったりします。imageviewそのため、中央に配置されたままになるように、どこかに移動します。

編集:

symbolImageViewに別のフレームを設定していると思います。

これを試して

symbolImageView.frame = metronomeImageView.frame;
于 2012-07-24T08:31:57.257 に答える
0

私はコントローラーを使用して画像を表示していました。このように、ビューコードのdrawRectで画像が常に「描画」されるように、コードを再構築しました。

- (void)drawRect:(CGRect)rect
{  

if (metronomeImage)
{
    [metronomeImage drawInRect:CGRectMake(410.0f, 215.0f, metronomeImage.size.width, metronomeImage.size.height)];
}
}

これは問題なく機能します。setFrameとUIImageViewの代わりにdrawInRectとUIImageだけを使用したことに注意してください。コントローラーではなく、ビューコードでグラフィカルに実行する必要があるという規則に従うだけだと思います。

于 2012-07-25T02:40:45.350 に答える