ios - 无法在不同的 iPhone 设备上放置围绕 imageView 的圆形层

标签 ios swift uiimageview layer

enter image description here

我该如何解决这个问题? 图像在 Storyboard中设置了约束;另一个圆圈是用这些代码行设置的:

let centerY = profileImage.center.y+20+(self.navigationController?.navigationBar.frame.size.height)!
let centerX = profileImage.center.x
let center = CGPoint(x: centerX, y: centerY)
let trackLayer = CAShapeLayer()
let circularPath = UIBezierPath(arcCenter: center, radius: (profileImage.frame.width/2)+2, startAngle: -CGFloat.pi-CGFloat.pi/2, endAngle: CGFloat.pi/2, clockwise: true)
trackLayer.path = circularPath.cgPath
trackLayer.strokeColor = Functions.hexStringToUIColor(hex: "#3859B9").cgColor
trackLayer.lineWidth = 3
trackLayer.lineCap = kCALineCapRound
trackLayer.fillColor = UIColor.clear.cgColor
view.layer.addSublayer(trackLayer)

在 iPhone 7 上(右侧)似乎是正确的。

最佳答案

对导航栏或状态栏的高度使用固定值会导致此类错误。您应该根据 ImageView 定位图层。为此,您可以简单地将 ImageView 的框架分配给您的图层:

trackLayer.frame = profileImage.frame

由于布局可能会因多种原因而改变(例如设备旋转),您应该在 View Controller 的 viewDidLayoutSubviews 中执行此操作。

由于图层的框架现在比您的示例中的要小,因此您应该创建中心:

let center = CGPoint(x: profileImage.bounds.midX, y: profileImage.bounds.midY)

关于ios - 无法在不同的 iPhone 设备上放置围绕 imageView 的圆形层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48300683/

相关文章:

ios - 为 CATiledLayer 创建平铺图像

ios - 无法在前台接收 Firebase 的通知?

ios - 提高 SceneKit Playground 速度

ios - Swift 导入在包含框架时出现错误 "Could not build objective-C module ' Twitter'"

swift - 串行链接 do-try-catch 控制流的正确模式是什么?

ios - 在 ViewController 上保存数据(当移开或移至 ViewController 时)

ios - 使用 UIImageJPEGRepresentation 保存图像并用作 UIImage

ios - 如何本地化我在应用程序中获得的服务器端数据

swift - Xib,标签文字变化

iOS:运行 iOS 模拟器时加载随机 UIImageView