Действительно, вы, кажется, не понимаете, что такое рамки и границы.На самом деле они легки.Всегда помните, что любое представление имеет свою собственную систему координат.Свойства рамки, центра и преобразования выражаются в координатах суперпредставления, а границы - в собственной системе координат представления.Если представление не имеет суперпредставления (еще не установлено в иерархию представлений), оно все равно имеет фрейм.В iOS свойство кадра вычисляется из границ представления, центра и преобразования.Вы можете спросить, что означают рамка и центр ада, когда нет суперпредставления.Они используются, когда вы добавляете представление в другое представление, позволяя расположить представление до того, как оно действительно станет видимым.
Наиболее распространенный пример, когда границы представления отличаются от его рамки, это когда он не находится в верхнем левом углу.его суперпредставления: его bounds.origin может быть CGPointZero, а его frame.origin - нет.Другим классическим примером является UIScrollView, который часто модифицирует свой bounds.origin для прокрутки подпредставлений (фактически, изменение начала координат системы координат автоматически перемещает каждое подпредставление, не затрагивая их кадры), в то время как его собственный кадр является постоянным.
Вернуться к вашему коду.Прежде всего, когда у вас уже есть изображения для отображения в представлениях изображений, имеет смысл инициировать представления с их изображениями:
UIImageView *face1view = [[UIImageView alloc] initWithImage: sadface];
, что помогает представлению изображения сразу же изменять свой размер.Не рекомендуется инициализировать представления с -init
, потому что это может пропустить важный код в их назначенном инициализаторе, -initWithFrame:
.
Поскольку вы добавляете face1view в self.view, вам действительно следует использовать его границы, а неего рамка:
face1view.frame = self.view.bounds;
То же самое относится и к счастливому лицу.Затем в -touchesMoved:…
вы должны либо изменить frame face2view, чтобы переместить его в self.view, либо (если self.view не содержит никаких других подпредставлений, кроме граней), изменить bounds self.view.переместить оба лица внутри него вместе.Вместо этого вы делаете что-то странное, например, вертикально растягивает счастливое лицо внутри face2view.Если вы хотите, чтобы счастливое лицо скользило из нижней части self.view, вы должны сначала установить его кадр следующим образом (изначально не видимым):
face2view.frame = CGRectOffset(face2view.frame, 0, CGRectGetHeight(self.view.bounds));
Если вы решили поменять лица, изменив вид изображения 'кадры (в отличие от изменения bounds в self.view), я думаю, вы можете изменить исходные кадры обоих представлений, чтобы печальное лицо выскользнуло вверх, а счастливое лицо проскользнуло внутрь. Альтернативно, еслиВы хотите, чтобы счастливое лицо покрывало грустное:
face2view.frame = face1view.frame;