添加屏幕的子视图中心

时间:2013-05-26 23:17:48

标签: ios objective-c addsubview

我正在尝试在iPhone应用程序屏幕的中心添加一个小图标。下面是我认为应该起作用的代码,但它并不是它的中心。关于宽度的位置很好,但高度偏离,大约100像素关闭?

UIImage *pinMarker = [UIImage imageNamed:@"red_pen_marker.png"];
UIImageView *pinMarkerView = [[UIImageView alloc] initWithImage:pinMarker];
pinMarkerView.frame = CGRectMake(self.view.frame.size.width/2 - 9, self.view.frame.size.height/2 - 36, 18, 36);


[self.view addSubview:pinMarkerView];

有什么建议吗?也许根据整个应用程序窗口大小放置它而不是这个屏幕视图?

3 个答案:

答案 0 :(得分:13)

应该是self.view.frame.size.height/2 - 18。更简单的方法是将其设置为:

pinMarkerView.center = self.view.center;

但不知道父视图是什么,就不可能告诉如何将imageView带到屏幕中心。

答案 1 :(得分:4)

我认为NSLayoutConstraint应该解决你的问题

UIView *superview = self.view;

UIImage *pinMarker = [UIImage imageNamed:@"red_pen_marker.png"];
UIImageView *pinMarkerView = [[UIImageView alloc] initWithImage:pinMarker];
pinMarkerView.frame = CGRectMake(self.view.frame.size.width/2 - 9, self.view.frame.size.height/2 - 36, 18, 36);

[pinMarkerView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:pinMarkerView];

NSLayoutConstraint *myConstraint =[NSLayoutConstraint
                                   constraintWithItem:pinMarkerView
                                   attribute:NSLayoutAttributeCenterX
                                   relatedBy:NSLayoutRelationEqual
                                   toItem:superview
                                   attribute:NSLayoutAttributeCenterX
                                   multiplier:1.0
                                   constant:0];
NSLayoutConstraint *myConstraint2 =[NSLayoutConstraint
                                   constraintWithItem:pinMarkerView
                                   attribute:NSLayoutAttributeCenterY
                                   relatedBy:NSLayoutRelationEqual
                                   toItem:superview
                                   attribute:NSLayoutAttributeCenterY
                                   multiplier:1.0
                                   constant:0];

[superview addConstraint:myConstraint];
[superview addConstraint:myConstraint2];

答案 2 :(得分:3)

这是一个解决方案

而不是self.view.frame.size.width

使用:: [UIScreen mainScreen] .bounds.size.width或height

所以代码是

UIImage *pinMarker = [UIImage imageNamed:@"red_pen_marker.png"];
UIImageView *pinMarkerView = [[UIImageView alloc] initWithImage:pinMarker];
pinMarkerView.frame = CGRectMake([UIScreen mainScreen].bounds.size.width / 2, [UIScreen mainScreen].bounds.size.height / 2 , 18, 36);
[self.view addSubview:pinMarkerView];