Набор для программирования iPhoneNeedsDisplay не работает - PullRequest
0 голосов
/ 13 июля 2009

Реализован собственный метод drawRect, и я пытаюсь перерисовать фигуру из класса Controller, и я не могу понять, как правильно реализовать setNeedsDisplay для перерисовки UIView. Пожалуйста, помогите !!

Я знаю, что код некрасив, но вот пользовательский метод:

- (void)drawRect:(CGRect)rect{
// Drawing code
NSArray *kyle = [self pointsForPolygonInRect:rect numberOfSides:[pshape numberOfSides]];
CGContextRef c = UIGraphicsGetCurrentContext();

int counter = [kyle count];
NSLog(@"counter: %d",counter);
int i = 0;
BOOL first = YES;

NSValue *kylevalue;
CGPoint thePoint;
for (i = 0; i < counter; i++) {
    kylevalue = [kyle objectAtIndex:i];
    thePoint = [kylevalue CGPointValue];
    if (first) { //start.
        CGContextMoveToPoint(c, thePoint.x, thePoint.y+5.0);
        first = NO;
    } else { //do the rest
        CGContextAddLineToPoint(c,  thePoint.x, thePoint.y+5.0);
    }
}
CGContextClosePath(c); //solid color
CGContextDrawPath(c, kCGPathFillStroke);    

}

Ответы [ 5 ]

3 голосов
/ 29 августа 2010

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

Для своих нужд я написал категорию для перерисовки всего экрана, вызывая setNeedsDisplay для каждого отдельного представления. Конечно, это можно легко изменить, чтобы начать с определенного вида, в отличие от всех окон.

@implementation UIApplication (Extensions)

+ (void) redrawScreen {
 NSMutableSet* todo = [NSMutableSet set];
 NSMutableSet* done = [NSMutableSet set];
 [todo addObjectsFromArray:[[UIApplication sharedApplication] windows]];

 while ([todo count] > 0) {
  UIView* view = [todo anyObject];
  [view setNeedsDisplay];

  [done addObject:view];
  [todo removeObject:view];

  if (view.subviews) {
   NSMutableSet* subviews = [NSMutableSet setWithArray:view.subviews];

   [subviews minusSet:done];
   [todo unionSet:subviews];
  }
 }
}

@end

Надеюсь, это кому-то поможет

1 голос
/ 13 июля 2009

Я не уверен, что понимаю ваш вопрос. Вызов -setNeedsDisplay для представления приводит к его перерисовке через его -drawRect: метод.

0 голосов
/ 19 ноября 2014

Если на вашем графике есть метод drawRect, посмотрите на свой viewController, на код, с которым он соединяется с вашим графиком. Это правильно подключено? Маленький кружок рядом с полостью? или заполненный. Этот маленький круг должен быть заполнен, если свойство подключено правильно. Если это пусто, поднимите раскадровку.

Найдите объект сюжета в раскадровке. Управляйте перетаскиванием от объекта сюжета в раскадровке к пустому кругу на контроллере вида. Теперь вы подключили розетку. Попробуйте запустить его еще раз, и посмотрите, вызывается ли ваш drawRect сейчас.

0 голосов
/ 17 мая 2011

Иногда причина может быть очень простой: владелец файла не имеет связи с объектом UIView. то есть это розетка не настроена должным образом. Используйте IB, кнопку ctrl и метод перетаскивания :)

0 голосов
/ 14 июля 2009

всего несколько мыслей 1. Вы убедились, что ваш метод вызывается? 2. проверили ли вы, что ваш массив точек заполнен несколькими точками? 3. действительно ли точки находятся в видимой области кадра? 4. Я не вижу, чтобы вы устанавливали ширину обводки, цвет или заливку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...