2016-09-12 7 views
1

Я хочу создать UIImage из массива нескольких UIBezierPaths в Swift.Создайте UIImage из массива Uibezierpath в Swift

Я попытался следующий код:

func convertPathsToImage(paths: [UIBezierPath]) -> UIImage{ 

    let imageWidth: CGFloat = 200 
    let imageHeight: CGFloat = 200 

    let colorSpace:CGColorSpace = CGColorSpaceCreateDeviceRGB()! 
    let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue) 
    let context = CGBitmapContextCreate(nil, Int(imageWidth), Int(imageHeight), 8, 0, colorSpace, bitmapInfo.rawValue) 

    CGContextBeginPath(context); 

    UIColor.blackColor().set() 

    for path in paths{ 
     path.stroke() 
    } 

    let newImageRef = CGBitmapContextCreateImage(context); 
    let newImage = UIImage(CGImage: newImageRef!) 

    return newImage 

    } 

Результат является пустым образом.

Может кто-нибудь объяснить мне, что я делаю неправильно? Большое спасибо!

+0

Вы добавляете эти пути в слой вида? – EridB

+0

@EridB Нет. Я не хочу добавлять их на уровень представления. –

+0

Можете ли вы приложить конкретный пример массива '[UIBezierPath]? –

ответ

1

Я не могу сказать вам, что вы делаете неправильно, но у меня была аналогичная проблема, и этот код работает для меня.

func convertPathsToImage(paths: [UIBezierPath]) -> UIImage 
{ 
    let imageWidth: CGFloat = 200 
    let imageHeight: CGFloat = 200 
    let strokeColor:UIColor = UIColor.blackColor() 

    // Make a graphics context 
    UIGraphicsBeginImageContextWithOptions(CGSize(width: imageWidth, height: imageHeight), false, 0.0) 
    let context = UIGraphicsGetCurrentContext() 

    CGContextSetStrokeColorWithColor(context, strokeColor.CGColor) 

    for path in paths { 
     path.stroke() 
    } 
    let image = UIGraphicsGetImageFromCurrentImageContext() 

    UIGraphicsEndImageContext() 

    return image 
} 
+0

Спасибо за ваш ответ. Я нашел другое решение для своей проблемы, но, думаю, ваш код тоже работает. Я буду принимать его как правильный ответ. –

Смежные вопросы