Я пытаюсь нарисовать небольшое изображение на UIScrollView для моего приложения для iPhone. Я начал с UIImage, созданного из png, который я включил в свой комплект, и это работает нормально. Каждый раз, когда масштабирование / панорамирование останавливается, делегат просмотра прокрутки пересчитывает кадр этого UIImage (который является подпредставлением содержимого view UIScrollView) и вызывает setNeedsDisplay. Рамка становится все меньше и меньше при измерении ширины / высоты при увеличении масштаба прокрутки, потому что я хочу, чтобы изображение оставалось на экране того же размера. Когда пользователь масштабирует изображение неправильного размера, но как только масштабирование останавливается, оно исправляется. Не очень, но и не самое страшное.
Проблема теперь в том, что я хочу нарисовать изображение сам, а не иметь статический png. Я подклассифицировал UIView и попал в метод drawRect, но я не могу правильно вычислить математику, чтобы нарисовать гладкий вид траектории при увеличении представления. Я думал, что могу просто уменьшить ширину линии и радиус круга. Рисую (CGContextAddArc), но похоже, что iPhone пытался нарисовать тонкую подкладку круга на два или три пикселя, а затем увеличил эти пиксели, а не увеличил изображение и нарисовал высокоточный круг над ним.
Это ViewController, изменяющий размер UIView (который является подпредставлением contentView UIScrollView)
float scaler = (1/scrollView.zoomScale);
[targetView setFrame:CGRectMake(viewCoords.x-11*scaler, viewCoords.y-11*scaler, 22*scaler,22*scaler)];
[targetView setNeedsDisplay];
Это ничья UIView
float x = rect.origin.x + rect.size.width/2.0;
float y = rect.origin.y + rect.size.height/2.0;
float radius = (rect.size.width-2.0*lineWidth)/2.0;
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(ctx,lineWidth );
CGContextSetRGBStrokeColor(ctx, 1.0, 0.0, 0.0, 1.0);
CGContextAddArc(ctx, x, y, radius , 0, 2* M_PI, 1);
CGContextClosePath(ctx);
CGContextStrokePath(ctx);
Я открыт для идеи размещения подкласса UIView в другом месте, но я должен сделать так, чтобы он двигался синхронно с представлением содержимого UIScrollView