Вызов setNeedsDisplay для UIView из другого класса - PullRequest
0 голосов
/ 18 июня 2009

У меня есть подкласс UIView, на котором я манипулирую большим количеством графики на основе касаний. Все вызовы [self setNeedsDisplay] кажутся нормальными.

Однако я использовал указатель переменной экземпляра на тот же экземпляр подкласса UIView, а затем попытался манипулировать им, а затем вызывать [UIViewSubClass setNeedsDisplay] из другого класса UIView, и DrawRect никогда не вызывается. Существуют ли ограничения на то, откуда вы можете вызывать setNeedsDisplay?

(Этот метод вызывается при нажатии кнопки на другом подклассе UIView. Метод вызывается, но не DrawRect)

-(IBAction)loadGrid2;
{
    tempSoundArray = musicGridView1.soundArray;
    [musicGridView1.soundArray setButtonArrayToNull];
    [musicGridView1 setNeedsDisplay];
    musicGridView1.soundArray = tempSoundArray;
    NSLog(@"loadGrid2 was called");
}

Ответы [ 2 ]

1 голос
/ 18 июня 2009

Чтобы добавить к Бену: это, скорее всего, означает, что у вас есть проблемы в другом месте.Ваш указатель может быть не нулевым или иным образом недействительным, или представление может быть неправильно добавлено в иерархию.

Возможно, вы захотите рассмотреть не обработку этого типа поведения в представлении, а вместо этого в контроллере представления.Управляйте поведением и сохраняйте состояние представления в контроллере представления и не делайте подклассы на классы представления.Это упростит ваш код с меньшим количеством «указателей».Это также облегчит отладку проблем такого типа.

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

1 голос
/ 18 июня 2009

drawRect: будет вызываться только тогда, когда это имеет смысл; т.е. вид должен быть видимым, на экране и грязным. Ваш drawRect: когда-либо вызывается? Его также следует вызывать, когда представление впервые выводится на экран.

...