2016-04-09 2 views
0

У меня есть код в отдельном классе, который ограничен UIView.CGRect автоматически изменяет размер после действия

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGRect drawRect = CGRectMake(20, 262, 139, 169); 

[self setFrame:drawRect]; 

CGContextSetLineWidth(context, 2); 
CGContextSetStrokeColorWithColor(context, [[UIColor colorWithRed:125.0f/255.0f green:251.0f/255.0f blue:181.0f/255.0f alpha:1] CGColor]); 
CGContextSetRGBFillColor(context, 200.0f/255.0f, 100.0f/255.0f, 100.0f/255.0f, 1.0f); 

CGContextFillRect(context, drawRect); 

Но после нажатия этого вида размер UIView изменяется на размеры модели интерфейса от моей раскадровки.

Что имеет значение, и что с ним не так?

+1

Autolayout будет моей догадкой. – user3386109

+1

Нет места, где этот код имел бы смысл. Вы не можете вызывать 'UIGraphicsGetCurrentContext' вне' drawRect: 'и вы не должны вызывать' setFrame: 'внутри' drawRect: '. Где вы называете этот код? –

+0

Этот код помещается в функцию '- (void) drawRect: (CGRect) rect' Я пытаюсь снять флажок« Авторезистировать подвид »на родительском представлении (это основной вид в приложении) и попытаться снять флажок на себе UIView, который сделанный указанным выше кодом. –

ответ

1

drawRect: не место для изменения рамки. Если система не может автоматически обрабатывать изменение размера кадра (например, путем масштабирования представления), то в ответ на изменение размера кадра вызывается drawRect:. Если вы можете изменить размер кадра в середине рисунка, у вас будет бесконечный цикл.

Если вы хотите, чтобы вид находился в прямоугольнике (20,262,139,169), тогда это просто сделать автоспуск. Просто поместите представление туда, где вы хотите, и создайте ограничения, чтобы сохранить его там, используя Interface Builder.

Если вы не хотите автозапуск (не знаете, почему вы хотите отключить его здесь, но если вы это сделали), вы можете отключить его и позвонить setFrame: в viewDidLoad. Но нет причин повторять это в drawRect:.

Смежные вопросы