Базовый вопрос UIImageView

#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 просто привел ему пример… позвольте мне отредактировать его еще раз…