我的UITableView有一个自定义单元格。如果用户为项目单元格选择了图片,则会显示图片:
我正在使用以下代码来绘制颜色:
public class CircleStyleKit : NSObject {
//// Drawing Methods
public dynamic class func drawCanvas1(frame targetFrame: CGRect = CGRect(x: 0, y: 0, width: 38, height: 38), resizing: ResizingBehavior = .aspectFit, circleLable: String = "DR", circleSize: CGSize = CGSize(width: 38, height: 38), textSize: CGFloat = 17) {
//// General Declarations
let context = UIGraphicsGetCurrentContext()!
//// Resize to Target Frame
context.saveGState()
let resizedFrame: CGRect = resizing.apply(rect: CGRect(x: 0, y: 0, width: 38, height: 38), target: targetFrame)
context.translateBy(x: resizedFrame.minX, y: resizedFrame.minY)
context.scaleBy(x: resizedFrame.width / 38, y: resizedFrame.height / 38)
} // It's too long
我展示了部分代码,因为它太长了。
然后我使用UIView绘制这个矩形:
import UIKit
class CirclyStyleView: UIView {
override func draw(_ rect: CGRect) {
CircleStyleKit.drawCanvas1()
}
}
}
有两个问题:
首先,如果我在故事板中使用UIImageView,我就可以绘制图像了 而且我不知道我是否可以用我的代码绘制一个矩形。但是,我 检查它不起作用。
第二,如果我使用UIView,我可以绘制一个矩形,但如果我想绘制一个图像,我应该使用
UIColor(patternImage: UIImage(named: "picName")!)
,但我不能像我为图像视图那样改变这个图像框。例如,按照我在图片中显示的那样圈出来。问题是,我可以使用UIImageView,有没有办法在UIImageView中制作我的矩形 或者我可以使用UIView,有没有办法设置我的自定义图像。我的意思是改变图像大小和帧。
答案 0 :(得分:2)
使用单个UIImageView
并在模型上创建一个方法,根据其情况返回UIImage
。必须绘制图像时,请绘制到"图像上下文"。
我不是一个快速的作者,所以几乎是快速的......
func imageForThisItem(item : AnyObject) -> UIImage {
// not really "AnyObject", use the object type in your data source array
// even better, make this a method on that model object
if (/* item has an image, like the sailboat */) {
return UIImage(named:"SailboatImage") // or however you got the sailboat image
} else {
// initialize "size" to be the same size as the sailboat images
UIGraphicsBeginImageContextWithOptions(size, false, 0)
// do your circle and text drawing here within the rect (0,0,size.width,size.height)
UIColor.greenColor().setFill()
let bezier = UIBezierPath(rect : rect)
bezier.fill()
let initials = item.initials() // however you get this
// even better, if this is a model method, then self.initials()
let attributes = // an attribute dictionary, see link below
initials.drawInRect(rect, withAttributes: attributes)
// or use CGOffsetRect to provide a little margin
var image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
swift中的Here's an example文本属性。
在模型上使用此方法的另一个重要原因是您应该缓存此方法的结果,这样您就不必每次都计算它。懒惰的初始化模式非常适合这种情况。
lazy var imageForThisItem: [UIImage] = {
// code as above, using "self" rather than item
}()