Как я Вызываю Перерисовку (drawRect) SubView Когда это Размеры Изменений?

Да это законно и работает над всеми платформами. Это правильно инициализирует Вашу членскую переменную a к переданному в значении a.

Это рассматривают некоторые более чистые для именования их по-другому хотя, но не все. Я лично на самом деле использую его много:)

Инициализация перечисляет с теми же работами имени переменной, потому что синтаксис объекта инициализации в списке инициализации следующие:

< member> (< value>)

можно проверить то, что я записал выше путем создания простой программы, которая делает это: (Это не скомпилирует)

class  A
{

   A(int a)
   : a(5)//<--- try to initialize a non member variable to 5
   {
   }
};

, Вы получите ошибку компиляции что-то как: A не имеет поля названным 'a'.

<час>

На ноте стороны:

Одна причина, почему Вы не можете хотеть использовать то же имя элемента в качестве названия параметра, состоит в том, что Вы были бы более подвержены следующему:

class  A
{

   A(int myVarriable)
   : myVariable(myVariable)//<--- Bug, there was a typo in the parameter name, myVariable will never be initialized properly
   {
   }
   int myVariable;
};
<час>

На ноте (2) стороны:

Одна причина, почему можно хотеть использовать то же имя элемента в качестве названия параметра, состоит в том, что Вы были бы менее подвержены следующему:

class  A
{

   A(int myVariable_)
   {
     //<-- do something with _myVariable, oops _myVariable wasn't initialized yet
     ...
     _myVariable = myVariable_;
   }
   int _myVariable;
};

Это могло также произойти с большими списками инициализации, и Вы используете _myVariable прежде, чем инициализировать его в списке инициализации.

23
задан Rajesh Loganathan 17 November 2014 в 11:50
поделиться

2 ответа

В Cocoa вы редко (если вообще когда-либо) вызываете drawRect - вы просто помечаете область или представление как требующие обновления, и будет запланирована перерисовка. Это позволяет объединять перерисовки для нескольких недействительности.

Для Cocoa Touch требуется либо [view setNeedsDisplay] , либо setNeedsDisplayinRect: (CGRect)

59
ответ дан 29 November 2019 в 01:08
поделиться

Вам нужно вызвать [view setNeedsLayout], это должно привести к тому, что подпредставления получат вызов drawRect: при изменении макета. Однако я не проверял это.

3
ответ дан 29 November 2019 в 01:08
поделиться