2017-12-20 55 views
0

私はUIImageでUICollectionViewCellを持っています。そして、UIImageに上に重ねられたテキスト付きの無地の背景があるようにしようとしています。私は別に、これらのそれぞれを行う方法まで検索し、これは私が持っているものです。単色でUIImageを作成し、上にテキストを追加します(Swift)

ソリッド色でUIImageを作成:

let textImage = textToImage(drawText: "Placeholder text", inImage: whiteImage, atPoint: CGPoint(x: 20.0, y: 20.0)) 
:その後、私は機能 textToImageを呼んでいる

let rect = CGRect(origin: .zero, size: CGSize(width: 1, height: 1)) 
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0) 
let color = UIColor.white 
color.setFill() 
UIRectFill(rect) 
let whiteImage = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

func textToImage(drawText text: NSString, inImage image: UIImage, atPoint point: CGPoint) -> UIImage { 
    let textColor = UIColor.black 
    let textFont = UIFont(name: "Helvetica Neue", size: 74) 

    UIGraphicsBeginImageContext(image.size) 

    let textFontAttributes = [ 
     NSFontAttributeName: textFont, 
     NSForegroundColorAttributeName: textColor, 
     ] as [String : Any] 
    image.draw(in: CGRect(origin: CGPoint.zero, size: image.size)) 

    let rect = CGRect(origin: point, size: image.size) 
    text.draw(in: rect, withAttributes: textFontAttributes) 

    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return newImage! 
} 

そして:textToImage機能がある

UICollectionViewCellのUIImageとしてtextImageを設定します。

textToImage関数は通常のイメージで機能しますが、最初に単色でイメージを作成しようとすると、新しく作成されたイメージでtextToImageを呼び出そうとすると、単色が表示されますがテキストは表示されません。ここで何が問題になるかについてのアドバイスはありますか?ありがとう!

答えて

0

いくつかの問題があります。あなたのプライマリは、whiteImageは1x1ポイントだけです。したがって、textToImageに渡すと、新しい1x1イメージが作成されます。このような小さい画像ではテキストを読みにくい。

whiteImageを作成すると、より有効なサイズで物事がはるかに良くなります。あなたはまた、変更する必要があります

let rect = CGRect(origin: .zero, size: CGSize(width: 600, height: 300)) // pick a useful size 

UIGraphicsBeginImageContext(image.size) 

へ:

UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale) 
0

@rmaddyは、いくつかの重要なことを指摘していますが、このためにUIKitのAPIを使用して検討していますか?私はあなたがそれを作成した後に画像を使って何かをする必要があるかどうかわかりません(あなたはそれをサーバに送り、ライブラリに保存するなど)、あなたが記述していることは本当に簡単で、これは重要ではないかもしれませんが、画像の大きさはわかりません)。画像ビューの背景色を白に設定し、その上にラベルを追加するだけです。

あなたがその画像をキャプチャして何かをする必要があったとしても、iOSはUIViewのスクリーンショットをかなり簡単にします。 Hereはそれに関連するリンクです。

関連する問題