- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试像在 Android 中那样在 IOS 中添加渐变.所以我可以在 UIImageView 的顶部看到我的标签并且它没有隐藏。
在 android 中,我在一个可绘制的 `
中做了这个<gradient
android:angle="90"
android:endColor="#00ffffff"
android:startColor="#aa000000"
android:centerColor="#00ffffff" />
<corners android:radius="0dp" />
`
我正在尝试在 IOS Swift 4.2 中执行此操作,我得到以下信息:
let gradient: CAGradientLayer = CAGradientLayer()
gradient.colors = [UIColor.blue.cgColor, UIColor.red.cgColor]
gradient.locations = [0.0 , 1.0]
gradient.startPoint = CGPoint(x: 0.0, y: 1.0)
gradient.endPoint = CGPoint(x: 0.5, y: 0.5)
gradient.frame = CGRect(x: 0.0, y: 0.0, width: showImageView.frame.size.width, height: showImageView.frame.size.height)
showImageView.layer.addSublayer(gradient)
如何让渐变从底部开始变黑并以 90 度上升?如何更改不透明度?有什么想法吗?
最佳答案
一些想法:
选择 alpha
小于 1 的颜色。也许:
gradient.colors = [
UIColor.black.withAlphaComponent(0.8).cgColor,
UIColor.black.withAlphaComponent(0).cgColor
]
要使此渐变垂直,请选择具有相同 x
值的起点和终点。例如。覆盖下半部分,也许:
gradient.startPoint = CGPoint(x: 0.5, y: 1)
gradient.endPoint = CGPoint(x: 0.5, y: 0.5)
使用 frame
时要非常小心。您希望图层引用 ImageView 的 bounds
(使用 ImageView 的坐标系),而不是 frame
(它指定 ImageView 在其父 View 坐标中的位置系统)。如果您的 ImageView 恰好位于 0, 0
,您可能看不出有什么不同,但如果您移动 ImageView ,它们就会开始偏离。因此,假设您要将此渐变添加到 ImageView 本身,您将使用 ImageView 的边界:
gradient.frame = showImageView.bounds
请注意, ImageView 的 frame
/bounds
有时会发生变化。因此,我们将在 UIImageView
或 UITableViewCell
子类中实现 layoutSubviews
,并在那里更新渐变的 frame
,例如
override func layoutSubviews() {
super.layoutSubviews()
gradient.frame = bounds
}
这样它会在 View 布局更改时更新渐变的 frame
。
另一种解决方案是定义一个 UIView
子类,比如 GradientView
,它呈现 CAGradientLayer
并定义基础 layerClass
是一个 CAGradientLayer
。然后在 ImageView 和标签之间添加此 View ,定义其约束,然后您将拥有一个随着 GradientView
大小变化而动态变化的渐变。 (这种 layerClass
方法的优势在于,与仅以编程方式更新 frame
相比,它可以产生更好的动画/过渡效果。)
因此,类似于:
class GradientView: UIView {
override class var layerClass: AnyClass { return CAGradientLayer.self }
var gradientLayer: CAGradientLayer { return layer as! CAGradientLayer }
var firstColor: UIColor = UIColor.black.withAlphaComponent(0.8) {
didSet { updateColors() }
}
var secondColor: UIColor = UIColor.black.withAlphaComponent(0) {
didSet { updateColors() }
}
override init(frame: CGRect = .zero) {
super.init(frame: frame)
configure()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
configure()
}
}
private extension GradientView {
func configure() {
updateColors()
gradientLayer.startPoint = CGPoint(x: 0.5, y: 1)
gradientLayer.endPoint = CGPoint(x: 0.5, y: 0.5)
}
func updateColors() {
gradientLayer.colors = [firstColor, secondColor].map { $0.cgColor }
}
}
如果您真的想让白色文本突出显示,除了在图像上添加渐变之外,您还可以向文本添加黑色发光/阴影。它很微妙,但确实使文本流行起来。只需使其阴影颜色与渐变颜色相同即可。
所以你可以看到效果,这里有一个单元格的四个再现,其中 (a) 没有渐变; (b) 有梯度; (c) 在文本周围使用渐变和漂亮的高斯模糊;和 (d) 文本周围有简单的阴影:
文本周围漂亮的高斯模糊渲染为:
customLabel.layer.shadowColor = UIColor.black.cgColor
customLabel.layer.shadowRadius = 3
customLabel.layer.shadowOpacity = 1
customLabel.layer.masksToBounds = false
customLabel.layer.shouldRasterize = true
我认为第三个再现(在图像上使用渐变,在文本周围使用发光)是最好的。它很微妙,但文字确实很流行。但是高斯模糊的计算成本很高,所以如果你发现这对你的性能有太大的不利影响,你可以使用第四个选项,使用简单的、非模糊的阴影:
customLabel.shadowColor = .black
// perhaps also
// customLabel.shadowOffset = CGSize(width: -1, height: -1)
关于ios - 通过 CAGradientLayer 在 IOS 的 UIImageView 中添加渐变层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54755209/
我一直在尝试实现这一点,但找不到任何可以在删除它们时像 iPhone 应用程序抖动一样抖动它的代码! CABasicAnimation *animation =
我有一个代码在 UIImageView.isAnimating 为 false 之后执行一些操作 但有趣的是它永远不会出错,它总是处于 YES 状态。 "isAnimating return is f
我的 UIViewController 中有一个 UIImageView。我在上面设置了一个图像。我做了如下旋转。 - (void) runSpinAnimationOnView:(UIImageVi
我有一个带有图像的 UIImageView。我在显示之前旋转了图像,方法是将 UIImageView 的变换属性设置为 CGAffineTransformMakeRotation(angle),其中角
如果有解决我的问题的答案,请给我一个链接。否则这是我的问题: 我目前正在运行 Swift 2.0 (Xcode 7) Sprite Kit Game,想知道 UIImageView 是否可以跟随另一个
我不知道我的想法是否正确,但我的问题是我在 UITableView 中有自定义单元格(看起来像汽车),每个单元格包含 2 个 UIImageViews(车轮图像),我需要旋转当 UITableView
我想知道是否有办法使用透明的 UIImageView(框 C)来剪辑移动到其上方的某些图像。 在我的示例中,我将均为 UIImageView 的框 A 和 B 移向透明的框 C。一旦盒子发生碰撞,我只
我有一个带有固定图像的 UIImageView。我想在顶部添加第二个 UIImageView,我打算旋转它。我需要在运行时创建顶部图像。我找不到在哪里处理透明度。它在 UIImage 中还是在 UII
我有一个要求,我有一个 UIImageView 在另一个之上。当用户在其上“绘制”时,我需要使顶部透明。实际上,不是绘制用户将要做的事情,而是“删除”顶 View ,让下面的 View 显示出来。 我
您好,我有一个 UIImageView,它部分在屏幕上,部分在屏幕外。 我想围绕屏幕外的一个点( View 的中心)旋转 View 。 我该怎么做? fullRotationAnimation
我有两张图片。一个图像是矩形第二个是三角形我想使用一根手指或触摸事件从矩形图像的中心点旋转三角形图像。 最佳答案 好吧,如果您希望图像围绕矩形中心点以任意大小的圆旋转,那么数学会变得相当复杂,但是一个
我想知道是否可以将更多的 UIImageView 分组到一个 ImageView 中。例如,如果我有 4 个 imageView,并且我想以完全相同的方式为它们制作动画,我可以将它们组合成一个,然后为
我正在代码中创建多个 UIImageView,并且想要移动和删除我选择的任何 UIImageView。现在,我只能移动使用 UIPanGestureRecognizer 创建的最后一个 UIImage
现在,我已经让它能够在我的应用程序上移动图像、缩放图像、捏合图像……应有尽有。但我的问题是,当一个 UIImageView 位于另一个 UIImageView 时,我如何才能让应用程序注册? 最佳答案
我有一个 UIImageView 应该从 size (0,0) --> (93,75) 开始动画 我有以下内容 [UIView animateWithDuration:0.5 delay:0 op
我这里的问题应该是一个相当简单的问题。基本上,我试图将一个对象 (UIImageView) 从 A 点(它在 Storyboard中设置的位置)移动到我以编程方式定义的 B 点。 我第一次通过这个导致
我有一个带有包含图像的单元格的 UITableView。我想从服务器下载一个大图像并将其插入到我的单元格中。 我的 UITableViewCell 有一个固定的高度并且填满了屏幕的整个宽度。最好的解决
当用户选择新的图像过滤器时,我尝试对图像进行交叉淡入淡出。 所以我在第一个ImageView之上创建了第二个ImageView,并对顶部 View 的alpha进行动画处理以显示或隐藏底部 View
我有一个 UIScrollView,其中包含 n 个占位符 UIImageView。下面我有一个 StackView,其中包含 10 个图像,用户可以从中选择并将图像拖动到上面的特定占位符 Image
尝试设置“选定框”图形的边界的多种组合,该图形仅显示用户在 UIImageView 中触摸的位置。它仍然继续坚持 super View 坐标系 class ViewController: UIView
我是一名优秀的程序员,十分优秀!