Какая техника позволяет пользователю рисовать вид? - PullRequest
1 голос
/ 20 марта 2012

Каковы лучшие практики под iOS, чтобы позволить пользователю рисовать в интерактивном режиме прямоугольник, сегмент или другую простую форму?Скажем, я ловлю, когда пользователь нажимает в первый раз, а затем при перемещении пальца, что мне делать?Должен ли я поймать текущую координату, установить некоторую внутреннюю точку и вызвать setNeedsDisplay для вида и нарисовать линию между этими двумя точками?

Что если я захочу нарисовать поверхность, на которой уже есть куча фигур?Разве это не займет слишком много времени, чтобы обойти их всех и перекрасить снова?

В Windows я использовал операцию XOR, чтобы рисовать только то, что нужно, когда пользователь перемещал мышь, каковы методы в iOS?Любые статьи очень ценятся.

Thx

1 Ответ

0 голосов
/ 20 марта 2012

Попробуйте это

-(void) drawSquareFrom:(CGPoint)from to:(CGPoint)to {
    CGContextRef context = [self offscreenContext];
    CGRect draw , full = [self offscreenContextBounds];

    draw.origin = from;
    draw.size.width = to.x - from.x;
    draw.size.height = to.y - from.y;
    draw = CGRectStandardize( draw );

    [[UIColor redColor] setStroke];
    [[UIColor clearColor] setFill];
    CGContextClearRect( context , full );
    CGContextFillRect( context , draw );
    CGContextStrokeRectWithWidth( context , draw , 10 );
    [_imageView setNeedsDisplay];
}

-(CGContextRef) offscreenContext {
    if ( nil == myContext ) {
        size_t width = 400;
        size_t height = 300;
        CFMutableDataRef data = CFDataCreateMutable( NULL , width * height * 4 ); // 4 is bytes per pixel
        CGDataProviderRef provider = CGDataProviderCreateWithCFData( data );
        CGImageRef image = CGImageCreate( width , height , ... , provider , ... );
        CGBitmapContextRef context = CGBitmapContextCreate( CFDataGetMutableBytePtr( data ) , width , height , ... );
        CFRelease( data ); // retained by provider I think
        CGDataProviderRelease( provider ); // retained by image

        myImage = image;
        myContext = context;
        myContextFrame.origin = CGPointZero;
        myContextFrame.size.width = width;
        myContextFrame.size.height = height;
        _imageView.image = [UIImage imageWithCGImage:image];
    }

    return myContext;
}
-(CGRect) offscreenContextBounds {
    return myContextFrame;
}

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

...