Когда изменять размер кадра UIView при его пользовательском рисовании?

Я делаю пользовательский рисунок в своем приложении для метода View in drawRect.

Я фиксирую жест щипка пользователя и, основываясь на этом, я хотел изменить размер кадра представления каждый раз, когда я это делаю.

Я попытался изменить фрейм UIView в методе drawRect. Но я чувствовал, что это неправильное место, потому что drawRect просит нас рисовать в определенном прямоугольнике.

Я создал протокол, и когда я когда-либо делал захват, я пытался изменить размер кадра представления с контроллера представления с помощью методов протокола. Но и это не сработало.

Как я могу этого добиться?

ОБНОВЛЕНИЕ:

Мне удалось изменить фрейм UIView с помощью метода awakeFromNib пользовательского UIView. Но у меня есть необходимость регулярно менять кадр в зависимости от действий пользователей, и я не нашел способов перезагрузить метод awakeFromNib.


person Krishnan    schedule 15.10.2011    source источник


Ответы (1)


Это всего лишь примеры, и их нужно изменить, чтобы они соответствовали вашей конкретной ситуации, но вы, вероятно, могли бы использовать анимацию CGRectApplyAffineTransform или UIView:

- (IBAction)handlePinchGesture:(UIGestureRecognizer *)sender {
    UIView *senderView = sender.view;
    if (sender.state == UIGestureRecognizerStateBegan) {
        initialFrame = senderView.frame;
    }
    CGFloat factor = [(UIPinchGestureRecognizer *)sender scale];
    CGAffineTransform zt = CGAffineTransformScale(CGAffineTransformIdentity, factor, factor);
    senderView.frame = CGRectApplyAffineTransform(initialFrame, zt);
    return;
}

/* -------------------------------------------------------------------------- */

- (IBAction)handlePinchGesture:(UIGestureRecognizer *)sender {
    UIView *senderView = sender.view;
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.35f];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];

    /* Set changes for the animation before calling commitAnimations
    self.tableView.layer.borderWidth = 3.0;
    self.tableView.layer.borderColor = [[UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:0.85] CGColor];
    self.tableView.layer.backgroundColor = [[UIColor colorWithWhite:0.2 alpha:0.5] CGColor];
    self.tableView.layer.shadowOffset = CGSizeMake(4.0, 2.0);
    self.tableView.layer.shadowColor = [[UIColor blackColor] CGColor];
    self.tableView.layer.shadowOpacity = 1.0;
    self.tableView.layer.shadowRadius = 2.0;
    self.tableView.layer.cornerRadius = 10.0;
    */

    [UIView commitAnimations];
}
person chown    schedule 15.10.2011
comment
Спасибо за ответ. +1 за это. Но у меня другое сомнение, я не хочу увеличивать размер кадра исходя из щипков пользователя. Вместо этого я хочу изменить размер кадра на какой-то CGRect при каком-то условии. Как мне применить мой CGrect к этому преобразованию? - person Krishnan; 17.10.2011