Подтвердить что ты не робот

Как установить ссылку на начало UIView?

Я создаю UIImageView и добавляю его в цикле к моему представлению, я устанавливаю начальный кадр в 0,0,1,47, и каждый проход цикла меняю центр изображения, чтобы выложить их.

Я всегда использую 0 как origin.y

Проблема заключается в том, что ссылка источника находится в центре изображения, предполагая, что мы находимся в построителе интерфейса, это эквивалентно изображению ниже.

Как изменить контрольную точку в коде?

enter image description here

4b9b3361

Ответ 1

Прочитав эти ответы и ваши комментарии, я не совсем уверен, что вы думаете.

С помощью UIView вы можете установить положение двумя способами:

  • center - Он определенно говорит, что это центр.
  • frame.origin - верхний левый угол нельзя установить напрямую.

Если вы хотите, чтобы нижний левый угол находился в x = 300, y = 300, вы можете просто сделать это:

UIView *view = ...
CGRect frame = view.frame;
frame.origin.x = 300 - frame.size.width;
frame.origin.y = 300 - frame.size.height;
view.frame = frame;

Но если вы идете на один уровень глубже в магический мир CALayers (не забывайте импортировать QuartzCore), вы более мощные.

CALayer имеет следующие значения:

  • position. Понимаете, в нем не говорится "центр", поэтому он может быть не центром!
  • anchorPoint - CGPoint со значениями в диапазоне 0..1 (включая), который указывает точку внутри представления. По умолчанию x = 0,5, y = 0,5, что означает "центр" (и -[UIView center] принимает это значение). Вы можете установить его для любого другого значения, и свойство position будет применено к этой точке.

Пример времени:

  • У вас есть вид размером 100x100
  • view.layer.anchorPoint = CGPointMake(1, 1);
  • view.layer.position = CGPointMake(300, 300);
  • Верхний левый угол обзора находится в точке x = 200, y = 200, а нижний правый угол равен x = 300, y = 300.

Примечание.. При повороте слоя/представления он будет повернуть вокруг anchorPoint, который по умолчанию является центром.

Bu, так как вы просто просите КАК выполнить определенную вещь, а не ЧТО, которую вы хотите достичь, я больше не могу вам помочь.

Ответ 2

Рамка объекта включает в себя ее позицию в своем супервизии. Вы можете изменить его следующим образом:

CGRect frame = self.imageView.frame;
frame.origin.y = 0.0f;
self.imageView.frame = frame;

Ответ 3

Если я правильно вас понимаю, вам нужно установить рамку просмотра изображения, которое вы заинтересованы в перемещении. Это можно сделать в простом случае:

_theImageView.frame = CGRectMake(x, y, width, height);

Очевидно, вам нужно самому установить x, y, width и height. Также обратите внимание, что рамка представления относится к ее родительскому представлению. Итак, если у вас есть представление, которое находится в верхнем левом углу (x = 0, y = 0) и имеет ширину 320 точек и 400 точек, и вы задаете рамку изображения (10, 50, 100, 50), а затем добавьте его в качестве подсмотра предыдущего представления, он будет сидеть в точке x = 10, y = 50 в пространстве координат родительского представления, даже если границы изображения выглядят как x = 0, y = 0. Границы относятся к самому представлению, кадр относится к родительскому.

Итак, в вашем сценарии ваш код может выглядеть примерно так:

CGRect currentFrame = _theImageView.frame;
currentFrame.origin.x = 0;
currentFrame.origin.y = 0;
_theImageView.frame = currentFrame;

[_parentView addSubview:_theImageView];

В качестве альтернативы вы можете сказать:

CGRect currentFrame = _theImageView.frame;
_theImageView.frame = CGRectMake(0, 0, currentFrame.size.width, currentFrame.size.height);

[_parentView addSubview:_theImageView];

В любом из подходов будет отображаться изображение в верхнем левом углу родителя, к которому вы добавили его.