2016-12-08 9 views
0

Я пытаюсь создать миниатюры с закругленными углами и с баром внизу изображения на iOS.Обнаружен странный пилообразный при рисовании закругленных угловых изображений на iOS

И у меня есть следующий код:

extension UIImage { 
    func thumbnails(with options: SomeDrawingOptions) -> UIImage? { 
    // ... 

    UIGraphicsBeginImageContextWithOptions(targetRect.size, false, 0) 
    defer { 
     UIGraphicsEndImageContext() 
    } 
    let context = UIGraphicsGetCurrentContext()! 

    UIColor.white.setFill() 
    context.fill(targetRect) 

    UIBezierPath(roundedRect: targetRect, cornerRadius: 8).addClip() 

    // Drawing image 
    draw(in: targetRect) 

    // Drawing a transparent mask 
    UIColor.black.withAlphaComponent(0.4).setFill() 
    context.fill(targetRect) 

    // Drawing bar 
    UIColor.white.setFill() 
    context.fill(someBarRect) 

    return UIGraphicsGetImageFromCurrentImageContext() 
    } 
} 

Наконец я получил изображение с острыми закругленными углами так же, как те, в следующем снимке.

Sharp Rounded Corners

Любые рекомендации для устранения пилообразной закругленных углов?

======= раствор добавляют ======

Спасибо Ответ на @ wj2061, проблема решена. А вот код:

extension UIImage { 
    func thumbnails(with options: SomeDrawingOptions) -> UIImage? { 
    // ... 

    let targetRect = options.targetRect 
    let clippedPath = UIBezierPath(roundedRect: targetRect, cornerRadius: 8) 

    func makeImage() -> UIImage? { 
     UIGraphicsBeginImageContextWithOptions(targetRect.size, false, 0) 
     defer { UIGraphicsEndImageContext() } 
     let context = UIGraphicsGetCurrentContext()! 

     draw(in: targetRect) 

     // Drawing a transparent mask 
     UIColor.black.withAlphaComponent(0.4).setFill() 
     context.fill(targetRect) 

     // Drawing bar 
     UIColor.white.setFill() 
     context.fill(someBarRect) 

     return UIGraphicsGetImageFromCurrentContext() 
    } 

    UIGraphicsBeginImageContextWithOptions(targetRect.size, false, 0) 
    defer { UIGraphicsEndImageContext() } 
    let context = UIGraphicsGetCurrentContext()! 

    // Drawing image 
    clippedPath.addClip() 
    makeImage()?.draw(in: targetRect) 

    return UIGraphicsGetImageFromCurrentImageContext() 
    } 
} 
+0

@ Matt закругленных углов не должен быть виден, когда штрих цвет изображения является таким же, как цвет фона зрения контейнера (в данном случае, это вид коллекции) – mrahmiao

ответ

1

Так что кажется, что это западня имеет что-то делать с UIBezierPath(roundedRect: targetRect, cornerRadius: 8).addClip(), и я стараюсь, чтобы добавить маску к изображению на шаге 1, добавить угол к изображению в шаге 2. Код, как этот

extension UIImage { 
func thumbnails() -> UIImage? { 
    let targetRect = CGRect(x: 0, y: 0, width: 100, height: 150) 

    UIGraphicsBeginImageContextWithOptions(targetRect.size, false, 0) 
    defer { 
     UIGraphicsEndImageContext() 
    } 

    UIBezierPath(roundedRect: targetRect, cornerRadius: 8).addClip() 

    let makedImage = self.makedImage() 

    makedImage?.draw(in : targetRect) 

    return UIGraphicsGetImageFromCurrentImageContext() 
} 


func makedImage()->UIImage?{ 
    let targetRect = CGRect(x: 0, y: 0, width: 100, height: 150) 
    let someBarRect = CGRect(x: 0, y: 100, width: 100, height: 50) 

    UIGraphicsBeginImageContextWithOptions(targetRect.size, false, 0) 
    defer { 
     UIGraphicsEndImageContext() 
    } 
    let context = UIGraphicsGetCurrentContext()! 

    draw(in : targetRect) 


    // Drawing a transparent mask 
    UIColor.black.withAlphaComponent(0.4).setFill() 
    context.fill(targetRect) 

    // Drawing bar 
    UIColor.white.withAlphaComponent(1).setFill() 
    context.fill(someBarRect) 

    return UIGraphicsGetImageFromCurrentImageContext() 
} 
} 
+0

После восстановления GState() , бар не будет обрезаться, а два закругленных угла внизу исчезнут. – mrahmiao

+0

Похоже, что 'UIGraphicsGetCurrentContext.clear()' это метод, который вы ищете. Я также изменяю порядок или 'context.fill (targetRect)', так что изображение не имеет белого верхнего угла. – wj2061

+0

Это действительно сработало. Пила была устранена. Тем не менее, панель с прозрачным цветом не может быть нарисована. Хотя я установил прозрачный цвет, прозрачный эффект не может быть замечен. – mrahmiao

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

  • Нет связанных вопросов^_^