#objective-c
#objective-c
Вопрос:
Эй, ребята, когда вы задаете координаты UIImageView, он устанавливает UIImageView соответствующим верхнему правому углу. Есть ли какой-либо способ применить координаты к нижнему левому краю?
Ответ №1:
если у вас есть ссылка на представление, вы можете установить его точку привязки uisng
view.layer.anchorPoint = CGPointMake(0,1);
// ваш левый нижний угол..
0,0 означает, что верхний левый угол
по умолчанию равен 0,5, 0,5 по центру,
максимальное значение равно 1,1 в правом нижнем углу
и не забудьте импортировать <QuartzCore/QuartzCore.h>
Комментарии:
1. Привет, спасибо! Однако мне не нравится использовать IB, как я могу сделать это программно? Действительно ли мне нужно создавать подкласс класса UIImageView, чтобы он применялся ко всем моим изображениям? Или есть другой способ? Еще раз спасибо 🙂
2. Кстати, я слышал, что в objective c вы можете добавлять / переопределять методы и переменные экземпляра в существующий класс, не создавая его подклассов? Я хочу, чтобы это работало для каждого UIImageView, который я инициализирую? Возможно ли это?
3. Да, вы можете переопределять методы, но не переменные.. выполните поиск категорий в objective c, затем переопределите метод init
Ответ №2:
UIImageView
настройки позиционирования унаследованы от UIView
. Вот почему вы можете манипулировать только с помощью frame
и center
свойств вашего UIImageView
. Но вы можете «имитировать» позиционирование в левом нижнем углу:
UIView *yourView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
int bottomLeftX, bottomLeftY;
CGRect rect = yourView.frame;
yourView.frame = CGRectMake(bottomLeftX, bottomLeftY - rect.size.height, rect.size.width, rect.size.height);
Комментарии:
1. Хм, круто, спасибо, что работает, но это немного непрактично, если у меня много представлений для реализации
2. Создайте подкласс
UIView
и реализуйтеsetBottomLeftCornerPostition:(CGPoint)point
метод
Ответ №3:
Ответ на второй вопрос… Просто импортируйте эти файлы, в которых вы создаете uiimageview
@interface UIImageView (MyCategory)
- (id)init;
@end
@implementation UIImageView (MyCategory)
- (id)init {
self = [super init];
if (self) {
self.layer.anchorPoint = CGPointMake(0, 1);
}
return self;
}
@end
Приведенный выше код может вызвать проблему, поскольку инициализация UIImageView может выполнять и какую-то другую задачу, поэтому вам следует выполнить следующее
@interface UIImageView (MyCategory)
- (id)initMyImageView;
@end
@implementation UIImageView (MyCategory)
- (id)initMyImageView {
[self init];
self.layer.anchorPoint = CGPointMake(0, 1);
return self;
}
@end
и использовать его как [[UIImageView alloc] initMyImageView];
Комментарии:
1. @caswell, я знаю, что это плохая идея, поскольку инициализация по умолчанию может выполнять и какую-то другую задачу … но он хочет сделать category…so просто привел ему пример… позвольте мне отредактировать его еще раз…