2016-05-17 4 views
2

Я хотел бы создать MKAnnotationView, который выглядит следующим образом.Как создать округленное изображение с границей и тенью как MKAnnotationView в Swift?

enter image description here

код у меня уже есть:

func maskRoundedImage(image: UIImage, radius: Float) -> UIImage { 
    let imageView: UIImageView = UIImageView(image: image) 
    var layer: CALayer = CALayer() 
    layer = imageView.layer 

    layer.masksToBounds = true 
    layer.cornerRadius = CGFloat(radius) 
    layer.borderWidth = 4.0 
    layer.borderColor = UIColor.whiteColor().CGColor 

    UIGraphicsBeginImageContext(imageView.bounds.size) 
    layer.renderInContext(UIGraphicsGetCurrentContext()!) 
    let roundedImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return roundedImage 
} 

func imageResize (image:UIImage, sizeChange:CGSize)-> UIImage{ 

    let hasAlpha = true 
    let scale: CGFloat = 0.0 // Use scale factor of main screen 

    UIGraphicsBeginImageContextWithOptions(sizeChange, !hasAlpha, scale) 
    image.drawInRect(CGRect(origin: CGPointZero, size: sizeChange)) 

    let scaledImage = UIGraphicsGetImageFromCurrentImageContext() 
    return scaledImage 
} 

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 

    let annotationReuseId = "Place" 
    var anView = mapView.dequeueReusableAnnotationViewWithIdentifier(annotationReuseId) 
    if anView == nil { 
     anView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationReuseId) 
    } else { 
     anView!.annotation = annotation 
    } 

    let imageString = User.UserData.base64String 
    let image = convertBase64ToImage(imageString!) 
    let size = CGSizeMake(40, 40) 

    let resizedImage = imageResize(image, sizeChange: size) 
    anView?.image = maskRoundedImage(resizedImage, radius: 20) 

    anView!.backgroundColor = UIColor.clearColor() 
    anView!.canShowCallout = true 
    return anView 
} 

Дело мое изображение очень низкого качества. У вас есть идеи, что я могу сделать, чтобы улучшить качество и как добавить тень?

enter image description here

ответ

2

до возвращения вашего нового "anView" вы можете использовать этот код:

anView!.layer.cornerRadius = anView!.frame.size.height/2 
anView!.layer.masksToBounds = true 
anView!.layer.borderColor = UIColor.whiteColor() 
anView!.layer.borderWidth = 5 

Это сделает его вокруг с белой каймой.

Если вместо этого вы хотите получить границу с самим изображением, вы можете просто использовать изображение и поместить его в качестве подсмотра вашего MKAnnotationView.

+0

@ Это работает :) Единственное, что мне пришлось изменить, это добавить CGColor после whiteColor(). Любая идея, как добавить тень под ним, как в верхней картине? – toobiz

+0

Ах, извините, полностью забыл CGColor, это правильно, это необходимо. Что касается тени, вы можете сделать: 1 - импортировать QuartzCore, 2 - использовать anView.layer.shadowOffset, anView.layer.shadowRadius, anView.layer.shadowOPacity. Это должно делать свое дело. –

+0

К сожалению, это не работает. Я прочитал, что для того, чтобы поместить тень под UIImageView, вы должны встроить ее в UIView и установить тень в UIView. Как я могу это достичь? – toobiz

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