UIImageview在父视图中无法居中

6
我有一个UIImageView,我将其添加到UIView中以增强触摸识别区域。当我尝试将UIImageView居中于UIView中时(如下所示的代码),中心位置被正确地设置了,但是当我运行程序时,图像显示在UIView框架之外,偏移很大。
你有什么想法吗?
// image size is 32x32 pixels but view will be created with 44x44 so touch recognition is better
self = [super initWithFrame:CGRectMake(position.x, position.y, 44, 44)];

if (self) {
    switch (color) {
        case Blue:
            self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pin_red"]];
            break;
        case Green:
            self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pin_green"]];
        default:
            break;
    }

    [self setCenter:position];
    [self addSubview:self.imageView];
    [self setExclusiveTouch:YES];        
    [self setBackgroundColor:[UIColor clearColor]];

    [self.imageView setCenter:position];

    NSLog(@"uiview center: %@", NSStringFromCGPoint(self.center));
    NSLog(@"image center: %@", NSStringFromCGPoint(self.imageView.center));

谢谢!

3个回答

21

ImageView的setCenter方法是相对于其父级进行定位的。尝试使用:

[self.imageView setCenter:CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2)];

谢谢您的快速回答,但是如果我尝试使用 [self.imageView setCenter:self.center],结果仍然是一样的 :-( - illogic
1
这不是我建议的。你需要获取相对于父级的点。self.center将返回相对于其父级的点,并且不应该起作用。 - tillerstarr
但是self是Superview,因此在这种情况下它是父视图。或者我错了吗? - illogic
它将会在其父坐标系中报告。在最高层永远都有一个UIWindow。 - tillerstarr
2
啊,现在我明白了 :-) [self.imageView setCenter:CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds))]; 就是解决问题的关键!谢谢! - illogic

1
UIImageView *imageforFace=[[UIImageView alloc]initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2,[UIScreen mainScreen].bounds.size.height/2, 125,125)];
imageforFace.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;
[imageforFace setCenter:CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2)];
imageforFace.image=[UIImage imageNamed:@"face.png"];
[self.view addSubview:imageforFace];

最终输出是。

enter image description here


0

尝试使用以下代码将UIImageView框架设置为UIView中心

1)在.h文件中

UIImageView *imgCenter;

2) 在 .m 文件中

- (void)viewDidLoad
{
    imgCenter=[[UIImageView alloc]initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width / 2, [UIScreen mainScreen].bounds.size.height / 2, 35, 35)];
    [imgCenter setImage:[UIImage imageNamed:@"centerImage.png"]];
    [self.view addSubview:imgCenter];
}

或者

- (void)viewDidLoad
{
    imgCenter=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 35, 35)];
    imgCenter.center = self.view.center;
    [imgCenter setImage:[UIImage imageNamed:@"centerImage.png"]];
    [self.view addSubview:imgCenter];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接