Zac*_*ris 29 uiprogressview swift
我一直在尝试更改进度视图的大小和旋转以采用屏幕的大小.它基本上起到了手机屏幕上的填充玻璃效果的作用.
我用它来无害地旋转它
self.masteryProgress.transform = CGAffineTransformMakeRotation((CGFloat(-90) / CGFloat(180.0) * CGFloat(M_PI)))
通过view.bounds尝试获取矩形和宽度x高度,我获得了包围屏幕的视图大小.所以我不会被困在那里.
我尝试使用.frame .drawRect但是当我使用它时,要么打破它们,要么什么都不做.
在interfaceBuilder中,height属性似乎被锁定在2的常量值.
在构建自定义动画之前的任何解决方案?
我尝试在其他帖子中设置进度条的高度,就像其他帖子所说的那样,但我需要让进度视图填满整个屏幕,无论它运行的是什么设备,这样解决方案在我的情况下都不起作用.
我最终使用了
CGAffineTransformScale(masteryProgress.transform, view.bounds.height / 1334, (view.bounds.width / 2))
由于我正在垂直旋转progressView,我将进度视图设置为宽度1334(iPhone 6 Plus的高度)和高度2.通过将屏幕高度除以这些值,它应调整到任何手机的大小完美.
Ban*_*ngs 86
您可以通过设置其变换来缩放它,如下所示:
斯威夫特2
masteryProgress.transform = CGAffineTransformScale(masteryProgress.transform, 1, 20)
Run Code Online (Sandbox Code Playgroud)
斯威夫特3,4
masteryProgress.transform = masteryProgress.transform.scaledBy(x: 1, y: 20)
Run Code Online (Sandbox Code Playgroud)

Sau*_*lui 24
在制作UIProgressView圆形矩形时我遇到了问题.虽然只使用变换
masteryProgress.transform = CGAffineTransformMakeScale(1, 4)
Run Code Online (Sandbox Code Playgroud)
我实现了这不是我的最终要求.
而我的最终期望是如下
我终于通过以下两个步骤实现了它
1.从Interface Builder设置高度约束:
2.创建自定义类UIProgressView和覆盖func layoutSubviews()以添加自定义遮罩层:
override func layoutSubviews() {
super.layoutSubviews()
let maskLayerPath = UIBezierPath(roundedRect: bounds, cornerRadius: 4.0)
let maskLayer = CAShapeLayer()
maskLayer.frame = self.bounds
maskLayer.path = maskLayerPath.cgPath
layer.mask = maskLayer
}
Run Code Online (Sandbox Code Playgroud)
这是最终的结果
小智 20
变换似乎仍然是实现这一目标的唯一方法.尝试将其添加为UIProgressView的扩展名,如此.
extension UIProgressView {
@IBInspectable var barHeight : CGFloat {
get {
return transform.d * 2.0
}
set {
// 2.0 Refers to the default height of 2
let heightScale = newValue / 2.0
let c = center
transform = CGAffineTransformMakeScale(1.0, heightScale)
center = c
}
}
}
Run Code Online (Sandbox Code Playgroud)
Sta*_*ski 12
如果您使用Interface Builder添加了UIProgressView,只需创建高度约束并更改为您需要的值.而已.
这将有效:
masteryProgress.transform = CGAffineTransformMakeScale(1, 4)
Run Code Online (Sandbox Code Playgroud)
小智 5
'Sauvik Dolui'答案的一些修改:
在 UIBezierPath 中你应该设置 cornerRadius: like (self.frame.height / 2)。这是比使用(4.0)更通用的解决方案。
override func layoutSubviews() {
super.layoutSubviews()
let maskLayerPath = UIBezierPath(roundedRect: bounds, cornerRadius: self.frame.height / 2)
let maskLayer = CAShapeLayer()
maskLayer.frame = self.bounds
maskLayer.path = maskLayerPath.cgPath
layer.mask = maskLayer
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26713 次 |
| 最近记录: |