我正在尝试在CALayer中绘制图像,并且在绘图显示在不同尺寸的显示器上时遇到问题。
func drawLayer(){
let circleLayer = CAShapeLayer()
let radius: CGFloat = 30
let x = Thermo.frame.origin.x
let y = Thermo.frame.origin.y
let XX = Thermo.frame.width
let YY = Thermo.frame.height
print("X: \(x) Y: \(y) Width: \(XX) Height: \(YY)")
circleLayer.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 2.0 * radius, height: 2.0 * radius) , cornerRadius: radius).CGPath
circleLayer.fillColor = UIColor.redColor().CGColor
circleLayer.shadowOffset = CGSizeMake(0, 3)
circleLayer.shadowRadius = 5.0
circleLayer.shadowColor = UIColor.blackColor().CGColor
circleLayer.shadowOpacity = 0.8
circleLayer.frame = CGRectMake(0, 410, 0, 192);
self.Thermo.layer.addSublayer(circleLayer)
circleLayer.setNeedsDisplay()
}
在iPhone 6s的正确位置绘制一个圆圈。但是,如果封闭的UIImageView组件针对较小的设备进行缩放,那么显然不会。我添加了print()以查看图像大小和位置是什么......好吧,它在我在X上运行的每个设备上完全相同:192.0 Y:8.0宽度:216.0高度:584.0但显然它正在缩放受到AuoLayout经理的限制。
所以,我的问题是,如果我不能使用封闭的View的大小和位置,我怎么能找出适合不同屏幕尺寸的无线电和位置,因为这似乎永远不会改变?
这是我开始使用的图像,在UIImageView中,并尝试绘制。 我当然试图根据来自外部设备的数据对其进行着色。任何建议/示例代码最受赞赏!
答案 0 :(得分:1)
CALayer及其子类包括。 CAShapeLayer有一个属性
var contentsScale: CGFloat
从课堂参考:
对于您自己创建和管理的图层,您必须根据屏幕的分辨率和您提供的内容自行设置此属性的值。 Core Animation使用您指定的值作为提示来确定如何呈现您的内容。
所以你需要做的是在图层上设置比例,然后从UIDevice类获得设备的比例
circleLayer.scale = UIScreen.mainScreen().scale