Проблема рисования «кадров» в UIView с Core Graphics с использованием C # в Xamarin.iOS - PullRequest
0 голосов
/ 24 мая 2019

В UIView в проекте Xamarin.iOS у меня есть событие, которое регулярно запускается и вызывает SetNeedsDisplay() всякий раз, когда необходимо перерисовать содержимое этого представления:

delegate (object sender, EventArgs e)
{
    SetNeedsDisplay();
};

У меня также есть некоторыеCore Graphics вызывает в переопределенном методе Draw() UIView, репрезентативном для этого:

public override void Draw(CGRect rect)
{
    base.Draw(rect);
    using (var context = UIGraphics.GetCurrentContext())
    {
        // Draw a rectangle of a variable width and height
        context.FillRect(new CGRect(0, 0, _width, _height));
    }
}

Привод по событию, описанному выше, SetNeedsDisplay() вызывается 2-3 раза в секунду.С разными значениями _width и _height я бы ожидал, что прямоугольник будет быстро нарисован на экране с разными размерами, как часто вызывается SetNeedsDisplay().Тем не менее, прямоугольник перерисовывается только один или два раза в минуту .

Как рисовать с Core Graphics на желаемой частоте?

1 Ответ

0 голосов
/ 25 мая 2019

SetNeedsDisplay() должен вызываться из основного потока , чтобы получить желаемый эффект.Вышеуказанное событие не выполняется в главном потоке, поэтому вызов SetNeedsDisplay() должен быть вызван следующим образом:

InvokeOnMainThread(() =>
{
    SetNeedsDisplay();
});
...