Как установить ссылку на начало UIView?
Я создаю UIImageView и добавляю его в цикле к моему представлению, я устанавливаю начальный кадр в 0,0,1,47, и каждый проход цикла меняю центр изображения, чтобы выложить их.
Я всегда использую 0 как origin.y
Проблема заключается в том, что ссылка источника находится в центре изображения, предполагая, что мы находимся в построителе интерфейса, это эквивалентно изображению ниже.
Как изменить контрольную точку в коде?
![enter image description here]()
Ответы
Ответ 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];
В любом из подходов будет отображаться изображение в верхнем левом углу родителя, к которому вы добавили его.