Я боролся с, казалось бы, незначительным затруднением в том, как оживляет мой подкласс UIView. Я настроил вид так:
self.contentMode = UIViewContentModeRedraw;
self.contentStretch = CGRectMake(0.5f, 0.5f, 0.0f, 0.0f);
Вид - это в основном прямоугольник с 3-х пиксельным штрихом. Поскольку я хочу, чтобы представление не искажалось при изменении размера, у меня есть свойство contentStretch, указывающее середину представления. Проблема в том, что искажение происходит во время роста, но при уменьшении оно плавное.
Похоже, мой анимационный блок довольно прост; У меня есть отдельные для роста и сокращения. Вот растущий блок:
[UIView animateWithDuration:0.5 animations:^{
CGRect newRect = CGRectMake(20, 100, 200, 70);
[titleView setFrame:newRect];
}];
Это довольно сложно описать в посте, поэтому я собрал проект тестового примера, который выделяет только те части, которые имеют к этому отношение. Если кто-то хочет взглянуть?
http://dl.dropbox.com/u/2798577/ViewResizeTest2.0.zip
Вы можете видеть, когда вы нажимаете кнопку «Расти», левая сторона представления «глюкает» перед анимацией. Несмотря на то, что здесь это хорошо видно, в моем реальном проекте это немного хуже.
Я не уверен, что это ошибка в моем коде или проблема с фреймворком? Надеюсь, что это бывший ...
Спасибо,
Аарон.
Обновление
Получив щедрую обратную связь Джейкоба, я вернулся к своему приложению и удалил параметр contentMode как UIViewContentModeRedraw, отметив при этом, что он будет запускать drawRect каждый раз, когда анимирует, и, возможно, этот начальный кадр является частью сбоя. Так что теперь анимация плавная, но она анимируется в неправильную позицию, расплющивая стороны. Я обновил связанный проект, чтобы он более точно отражал то, что происходит в моем приложении.
Если бы мне пришлось угадывать, казалось бы, свойство contentStretch не выполняет свою работу. Это изменяет размер всего объекта, а не области CGRect внутри, согласно моей инструкции. Кто-нибудь может подтвердить, правильно ли я это использую?