尽管 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 脚本,但将配置文件的位置作为参数传递