вызывается, но не рисует - PullRequest
0 голосов
/ 02 мая 2011

У меня есть некоторый код в методе drawRect:, который рисует серию окружностей из массива. Я могу убедиться, что точки остаются в памяти достаточно долго и доходят до точки, где они должны быть нарисованы. Тем не менее, кажется, что fill метод NSBezierPath не рисует круги.

Вот мой drawRect:

- (void)drawRect:(NSRect)dirtyRect
{
    NSPoint aPoint;
    NSRect aRect = NSMakeRect(0, 0, 6, 6);

    // Erase the rectangle
    [[NSColor clearColor] set];
    NSRectFill([self bounds]);

    // Draw the dots
    [[NSColor colorWithCalibratedRed:(77.0/255.0) green:(11.0/255.0) blue:(11.0/255.0) alpha:1.0] set];

    for(NSValue *aValuePoint in arrayOfPoints) {
        aPoint = [aValuePoint pointValue];
        aRect.origin.y = aPoint.y - aRect.size.height/2.0;
        aRect.origin.x = aPoint.x - aRect.size.width/2.0;

        // The code does get to this point, it does not draw however...
        [[NSBezierPath bezierPathWithOvalInRect:aRect] fill];
    }
}

У меня есть другой метод drawDotAtPoint:, где я добавляю точки в массив

- (void)drawDotAtPoint:(NSPoint)aPoint
{
    NSLog(@"drawDotAtPoint:(%f, %f)", aPoint.x, aPoint.y);
    [arrayOfPoints addObject:[NSValue valueWithPoint:aPoint]];

    // I've also tried using [self superview] instead of just self        
    [self setNeedsDisplay: YES];
}

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

Sidenote: Моя цель - нарисовать точку, чтобы вокруг нее появилось кольцо, увеличилось и исчезло. Очень похоже на индикатор текущего местоположения GPS на iOS в приложении Карты. Любое понимание этого также будет оценено.

Ответы [ 2 ]

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

Я скопировал ваш код просмотра. Я вставил это в приложение-делегат для тестирования. BadView - это пользовательский вид (без вашего отражения - «Плохо», потому что он плохо себя ведет :)). Оба окна созданы в IB, и WebView также размещен в родительском окне в IB.

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // badWindow is an IBOutlet to the overlay window, parentWindow an IBOutlet
    // to the window with the webview, myWebView an IBOutlet to the webview
    BadView * myBadView = [[BadView alloc] initWithFrame:[[badWindow contentView] frame]];
    // Create some random points for testing
    [myBadView createArrayOfPoints];


    [badWindow setStyleMask:NSBorderlessWindowMask];
    [badWindow setOpaque:NO];
    [badWindow setAlphaValue:0.9];    // Will still act opaque without this
    [badWindow setHasShadow:NO];
    [badWindow setContentView:myBadView];

    [parentWindow addChildWindow:badWindow ordered:NSWindowAbove];
    [[myWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:
                                 [NSURL URLWithString:@"http://www.apple.com/"]]];

    [myBadView release];
}
0 голосов
/ 02 мая 2011

Проверьте свои точки и убедитесь, что у вас нет перевернутого прямоугольника и что ваши координаты X / Y соответствуют вашим ожиданиям.Убедитесь, что ваша опорная точка и координаты правильны.

Вам может помочь помощь с помощью инструмента Quartz Debug, который поставляется с инструментами разработчика Apple.Он находится в папке / Developer / Applications / Graphics Tools /.После запуска этого инструмента перейдите в меню «Инструменты» и включите «Обновления экрана Flash».Это даст вам представление о том, когда что-то перерисовывается или нет.

Надеюсь, что это поможет некоторым.

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