Применение преобразования к UITextView - предотвращение изменения размера контента - PullRequest
17 голосов
/ 25 июня 2011

Когда я применяю преобразование вращения к UITextView и затем нажимаю внутри, чтобы начать редактирование, кажется, что размер контента автоматически увеличивается.Новая ширина представления содержимого - это ширина ограничительной рамки повернутого представления.Например, если текстовое поле имеет ширину 500 и высоту 400 и повернуто на 30 градусов, ширина нового содержимого будет:

(500 * cos(30)) + (400 * sin(30)) = 633

Или графически:

enter image description here

Интересно, что если вы уже редактируете текстовое представление и ТОГДА применяете преобразование, то, по-видимому, никаких изменений в размере содержимого не производится.Таким образом, кажется, что когда-то в начале редактирования текста, текстовое представление смотрит на его свойство frame и регулирует размер содержимого на основе ширины кадра.Я полагаю, что решение этой проблемы состоит в том, чтобы сказать ему использовать вместо этого свойство bounds, однако я не знаю, где это сделать, поскольку не уверен, где именно текстовое представление решает изменить размер содержимого.

Я гуглил, но, похоже, не могу найти никаких ссылок на использование преобразованных UITextViews.У кого-нибудь есть идеи по этому поводу?

РЕДАКТИРОВАТЬ (действие кнопки из тестового проекта):

- (IBAction)rotateButtonTapped:(id)sender {
    if (CGAffineTransformIsIdentity(self.textView.transform)) {
        self.textView.transform = CGAffineTransformMakeRotation(30.0 * M_PI / 180.0);
    }
    else {
        self.textView.transform = CGAffineTransformIdentity;
    }

    NSLog(@"contentsize: %.0f, %.0f", textView.contentSize.width, textView.contentSize.height);
}

Ответы [ 2 ]

22 голосов
/ 08 февраля 2012

Я тоже застрял с этой проблемой.

Единственное решение, которое я нашел, было создать экземпляр UIView и добавить UITextView в качестве подпредставления. Затем вы можете повернуть экземпляр UIView, и UITextView будет работать нормально.

UITextView *myTextView = [[UITextView alloc] init];
[myTextView setFrame:CGRectMake(0, 0, 100, 100)];

UIView *myRotateView = [[UIView alloc] init];
[myRotateView setFrame:CGRectMake(20, 20, 100, 100)];
[myRotateView setBackgroundColor:[UIColor clearColor]];
[myRotateView addSubview:myTextView];

myRotateView.transform = CGAffineTransformMakeRotation(0.8);
[[self view] addSubview:myRotateView];
1 голос
/ 23 сентября 2011

Вы пытались применить вращение, выполняя преобразование слоя, а не преобразование на виде?

#import <QuartzCore/QuartzCore.h>

mytextField.layer.transform = CATransform3DMakeRotation (angle, 0, 0, 1);

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

...