这是我在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];
}
答案 0 :(得分: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;
答案 1 :(得分:0)
我正在使用Controller来显示图像。我重新构建了我的代码,以便始终在视图代码的drawRect中“绘制”图像,就像这样..
- (void)drawRect:(CGRect)rect
{
if (metronomeImage)
{
[metronomeImage drawInRect:CGRectMake(410.0f, 215.0f, metronomeImage.size.width, metronomeImage.size.height)];
}
}
这没有问题 - 请注意我刚刚使用了drawInRect而只使用了UIImage而不是setFrame和UIImageView。我想我只会按照约定,在视图代码中应该完成任何图形,而不是控制器。