iOS屏幕坐标和缩放

时间:2016-03-07 23:59:25

标签: ios iphone swift uiimageview calayer

我正在尝试在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中,并尝试绘制。 Base Image我当然试图根据来自外部设备的数据对其进行着色。任何建议/示例代码最受赞赏!

1 个答案:

答案 0 :(得分:1)

CALayer及其子类包括。 CAShapeLayer有一个属性

var contentsScale: CGFloat

从课堂参考:

  

对于您自己创建和管理的图层,您必须根据屏幕的分辨率和您提供的内容自行设置此属性的值。 Core Animation使用您指定的值作为提示来确定如何呈现您的内容。

所以你需要做的是在图层上设置比例,然后从UIDevice类获得设备的比例

circleLayer.scale = UIScreen.mainScreen().scale