尽管 Superview 的位置,但将 UIView 居中在 MainScreen 的中心

Posted

技术标签:

【中文标题】尽管 Superview 的位置,但将 UIView 居中在 MainScreen 的中心【英文标题】:Center UIView in center of MainScreen Despite Location of Superview 【发布时间】:2016-06-13 07:51:37 【问题描述】:

我有一个可以拖动的uiview。在那个 UIView 我有一个子视图,我想在设备屏幕的高度和宽度上居中。但是无论我尝试什么,它都会以超级视图为中心。尽管 UIView 在哪里,如何使子视图始终位于 UIDevice MainScreen 的中心。

我有(因为它有 50000 行长,所以删减了):

    popArtwork = [UIImageView new];
    popArtwork.frame = CGRectMake(367, 367, WidgetWidth, WidgetWidth/5.3);

    popArtwork.layer.cornerRadius = 10;
    popArtwork.layer.masksToBounds = YES;
    popArtwork.alpha = 0;
    [popArtwork setUserInteractionEnabled:YES];
    [add addSubview:popArtwork];

Add 是我的超级视图。我的程序有点不寻常,因为它是用户主屏幕的音乐小部件(越狱调整),因此他们可以将其移动到任何地方。无论 Add 可能在哪里,我都希望 popArtwork 视图始终位于屏幕的中心。

【问题讨论】:

告诉我们你到目前为止做了什么 我不记得 UIView 的原点是在 0,0 还是 0.5,0.5 。但应该是这样的:CGPoint localCenter = [self.view.superview convertPoint: CGPointZero fromView:[[[UIApplication sharedApplication] delegate] window]]; @UmairAfzal 我添加了我认为必要的内容。 【参考方案1】:

我不知道这是否是您要查找的内容,但它是如何在重新定位超级视图时使子视图居中:

- (void)viewDidLoad 
    [super viewDidLoad];

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(paned:)];
    [_add addGestureRecognizer:pan];




-(void)paned:(UIPanGestureRecognizer *)pan

    CGPoint translatedPoint = [(UIPanGestureRecognizer*)pan translationInView:self.view];

    if ([(UIPanGestureRecognizer*)pan state] == UIGestureRecognizerStateBegan) 
        firstX = [[pan view] center].x;
        firstY = [[pan view] center].y;
    

    translatedPoint = CGPointMake(firstX+translatedPoint.x, firstY+translatedPoint.y);

    [[pan view] setCenter:translatedPoint];


    CGRect newSubviewFrame = _subview.frame;
    newSubviewFrame.origin.x = [UIScreen mainScreen].bounds.size.width/2.0 - newSubviewFrame.size.width/2.0 - _add.frame.origin.x;
    newSubviewFrame.origin.y = [UIScreen mainScreen].bounds.size.height/2.0 - newSubviewFrame.size.height/2.0 - _add.frame.origin.y;
    _subview.frame = newSubviewFrame;


【讨论】:

以上是关于尽管 Superview 的位置,但将 UIView 居中在 MainScreen 的中心的主要内容,如果未能解决你的问题,请参考以下文章

在 superview 中存储 UIImageViews 及其位置

将 MKMapView 移动到相对于 superview 的特定位置

从 shell 调用 python 脚本,但将配置文件的位置作为参数传递

将文本附加到文本区域,但将插入符号位置设置为行尾

使用 iOS 6 Auto Layout 相对于 superview 的大小定位视图

UITableViewCell中两个基本相同的UILabel的奇怪约束差异