Эквивалент CGPathCreateCopyByStrokingPath на iOS4? - PullRequest
2 голосов
/ 15 октября 2011

Мне показалось, что CGPathCreateCopyByStrokingPath на iOS 5.0 довольно удобно использовать, но он доступен на iOS 5 и более поздних версиях.

Есть ли какой-нибудь простой способ добиться того же пути копирования в iOS 4?

Ответы [ 2 ]

3 голосов
/ 18 марта 2012

Я использую это, которое совместимо через IOS5 и IOS4 +. Он работает на 100%, если вы используете тот же цвет заливки + обводки. Документы Apple немного сомнительны по этому поводу - они говорят, что «это работает, если вы заполните его», они не говорят «что-то пойдет не так, если вы погладите его», - но в этом случае, похоже, что-то пойдет не так. YMMV.

// pathFrameRange: you have to provide something "at least big enough to 
// hold the original path"

static inline CGPathRef CGPathCreateCopyByStrokingPathAllVersionsOfIOS( CGPathRef 
  incomingPathRef, CGSize pathFrameRange, const CGAffineTransform* transform,
  CGFloat lineWidth, CGLineCap lineCap, CGLineJoin lineJoin, CGFloat miterLimit )
{
    CGPathRef result;

    if( CGPathCreateCopyByStrokingPath != NULL )
    {
        /**
        REQUIRES IOS5!!!
         */
        result = CGPathCreateCopyByStrokingPath( incomingPathRef, transform,
            lineWidth, lineCap, lineJoin, miterLimit);
    }
    else
    {
        CGSize sizeOfContext = pathFrameRange;
        UIGraphicsBeginImageContext( sizeOfContext );
        CGContextRef c = UIGraphicsGetCurrentContext();
        CGContextSetLineWidth(c, lineWidth);
        CGContextSetLineCap(c, lineCap);
        CGContextSetLineJoin(c, lineJoin);
        CGContextSetMiterLimit(c, miterLimit);
        CGContextAddPath(c, incomingPathRef);
        CGContextSetLineWidth(c, lineWidth);
        CGContextReplacePathWithStrokedPath(c);
        result = CGContextCopyPath(c);
        UIGraphicsEndImageContext();
    }
}
1 голос
/ 17 ноября 2011

Хммм - не знаю, квалифицируется ли это как "простой", но ознакомьтесь с методом Эда в этом SO сообщении.

...