Как центрировать два вида, используя view.frame и view.center - PullRequest
9 голосов
/ 13 сентября 2011

Я пытаюсь сделать что-то довольно простое здесь.Я использую блочную анимацию UIView, чтобы перенести подпредставление, находящееся в данный момент вне экрана, в центр текущего представления.Очевидно, что строка sp.view.frame = self.view.center является проблемой здесь.В конце концов, как мне сделать то, что я хочу?

[UIView animateWithDuration:1 delay:0
                    options:UIViewAnimationOptionCurveLinear
                 animations:^{
    sp.view.frame = self.view.center;        
}

Спасибо!

Ответы [ 3 ]

16 голосов
/ 13 сентября 2011

Сначала sp.view.frame возвращает CGRect, тогда как self.view.center возвращает CGPoint.Эти два типа не одинаковы, и поэтому один не может быть установлен на другой.Так как вы хотите установить центр sp.view как центр self.view, вы можете сделать это одним из двух способов:

sp.view.center = self.view.center;

или

[sp.view setCenter:self.view.center];
9 голосов
/ 13 сентября 2011
self.view.center

- это структура CGPoint.

sp.view.frame

- это структура CGRect.

Невозможно назначить CGPoint для CGRect, поскольку типы не совпадают.

Если вы хотите центрировать подпредставление, используйте что-то вроде этого, предполагая, что sp.view является подпредставлением self.view:

sp.view.frame = CGRectMake
(
    ( self.view.frame.size.width  / ( CGFloat )2 ) - ( sp.view.frame.size.width  / ( CGFloat )2 ),
    ( self.view.frame.size.height / ( CGFloat )2 ) - ( sp.view.frame.size.height / ( CGFloat )2 ),
    sp.view.frame.size.width,
    sp.view.frame.size.height
);

РЕДАКТИРОВАТЬ

Или, как предложил Ной:

sp.view.center = CGPointMake( self.view.bounds.size.width / 2, self.view.bounds.size.height / 2);

Спасибо, Ной, кстати ...

1 голос
/ 22 января 2013

Можно добавить макрос, подобный этому
#define countmid(X,Y) (float) (X-Y)/2
, а затем использовать его в коде как
float Center = countmid(VIEW.frame.size.width,SUB.frame.size.width);
, чтобы поместить SUB-вид в горизонтальный центр VIEW
То же самое для вертикального центра, просто используйте высоту против ширины

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...