提问人:Doug Null 提问时间:5/20/2021 最后编辑:Doug Null 更新时间:5/29/2021 访问量:81
如何在 iOS 设备上以编程方式在 UIImageView 后面显示彩色磁盘
how to programmatically show a colored disk behind a UIImageView, in swift on an iOS device
问:
我有一个以编程方式显示的图标。
如何在同一屏幕位置的图标后面显示一个纯色的彩色圆盘?
图标不透明。
我有时会以编程方式更改屏幕位置以及磁盘的直径和颜色。
以下是我现在以编程方式显示图标的方式.............
DispatchQueue.main.async
{
ViewController.wrist_band_UIImageView.frame = CGRect( x: screen_position_x,
y: screen_position_y,
width: App_class.screen_width,
height: App_class.screen_height)
}
D.Mika 的更新 #2 如下...
import UIKit
import Foundation
class ViewController: UIViewController
{
static var circleView: UIView!
static let wrist_band_UIImageView: UIImageView = {
let theImageView = UIImageView()
theImageView.image = UIImage( systemName: "applewatch" )
theImageView.translatesAutoresizingMaskIntoConstraints = false
return theImageView
}()
override func viewDidLoad()
{
super.viewDidLoad()
view.addSubview( ViewController.wrist_band_UIImageView )
// Init disk image:
ViewController.circleView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 100.0))
ViewController.circleView.backgroundColor = .red
ViewController.circleView.layer.cornerRadius = view.bounds.size.height / 2.0
ViewController.circleView.clipsToBounds = true
// Add view to view hierarchy below image view
ViewController.circleView.insertSubview(view, belowSubview: ViewController.wrist_band_UIImageView)
App_class.display_single_wearable()
}
}
class App_class
{
static var is_communication_established = false
static var total_packets = 0
static func display_single_wearable()
{
ViewController.wrist_band_UIImageView.frame = CGRect(x: 0, y: 0,
width: 100, height: 100)
ViewController.circleView.frame = CGRect( x: 0,
y: 0,
width: 100,
height: 100)
ViewController.circleView.layer.cornerRadius = 100
}
static func process_location_xy(text_location_xyz: String)
{}
} // App_class
答:
-1赞
D. Mika
5/20/2021
#1
您可以使用以下视图显示彩色圆圈:
circleView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 100.0))
circleView.backgroundColor = .red
circleView.layer.cornerRadius = view.bounds.size.height / 2.0
circleView.clipsToBounds = true
// Add view to view hierarchy below image view
view.insertSubview(circleView, belowSubview: wrist_band_UIImageView)
您可以通过应用新框架来更改它的位置和大小。但是您必须相应地更改图层的 cornerRadius。
编辑: 我修改了示例代码以添加视图层次结构。 但是,当您修改图像视图的框架时,您仍然需要调整圆的框架。(以及相应的 cornerRadius)。例如
DispatchQueue.main.async
{
ViewController.wrist_band_UIImageView.frame = CGRect( x: screen_position_x,
y: screen_position_y,
width: App_class.screen_width,
height: App_class.screen_height)
circleView.frame = CGRect( x: screen_position_x,
y: screen_position_y,
width: App_class.screen_width,
height: App_class.screen_height)
circleView.layer.cornerRadius = App_class.screen_width
}
你需要向 viewController 添加一个变量,用于保存对圆形视图的引用,例如:
var circleView: UIView!
评论
0赞
Duncan C
5/20/2021
设置显式框架仅在第一次触发 AutoLayout 并更新视图控制器中所有视图的布局之前有效。将布局锚点添加到设置其布局约束的彩色视图要安全得多。
0赞
Doug Null
5/20/2021
我没有使用自动布局。
0赞
Doug Null
5/20/2021
我将代码粘贴到 viewDidLoad() 的末尾,但没有任何显示。
0赞
D. Mika
5/20/2021
这只是如何创建显示彩色圆圈的 UIView 的示例。它不对使用哪种布局做出任何假设,也不会将此视图插入到视图层次结构中。
1赞
D. Mika
5/29/2021
@DougNull:如果你觉得被侮辱了,我很抱歉。但是您的回答或评论的内容表明存在知识差距。由于英语不是我的母语,可能是措辞错误。
-1赞
Doug Null
5/29/2021
#2
以下答案有效。
上面 d.mika 的答案不起作用。另外,他是侮辱性的。;-)
// Show red circle
let circlePath = UIBezierPath(arcCenter: CGPoint(x: 200, y: 400), radius: CGFloat(40), startAngle: CGFloat(0), endAngle: CGFloat(Double.pi * 2), clockwise: true)
let shapeLayer = CAShapeLayer()
shapeLayer.path = circlePath.cgPath
// Change the fill color
shapeLayer.fillColor = UIColor.red.cgColor
// You can change the stroke color
shapeLayer.strokeColor = UIColor.red.cgColor
// You can change the line width
shapeLayer.lineWidth = 3.0
view.layer.addSublayer(shapeLayer)
评论
ViewController.circleView.insertSubview(view, belowSubview: ViewController.wrist_band_UIImageView)
view.insertSubview(ViewController.circleView, belowSubview: ViewController.wrist_band_UIImageView)