プログラムで添付された画像とまったく同じ勾配を達成するにはどうすればよいですか? iOSプログラム勾配
答えて
答えは、デザイナーがグラデーションの作成に使用したものによって大きく異なります。グラデーションの色や点など、開発者に役立つ情報を提供するInvisionなどのツールがいくつかあります。ただし、Photoshopで作成したばかりの場合は、プログラムで再現するのが難しくなります。グラデーションのイメージを求めてください。
もう1つの解決策は、Xcodeで@IBDesignable
グラディエントビューを使用することです。私を含む多くの開発者がこれを作成しています。これは主にこの問題を過去に多く処理しなければならなかった結果です。このアプローチの大きなメリットは、色を微調整することが非常に簡単で、必要に応じてアニメーションを作成することです。
私はオープンソースの例であるavailable on GitHubを加えて、extended explanation of how it worksと書いています。
私は自分のプロジェクトを使用してあなたのようなグラデーションを作るために迅速な試みがあったが、これはXcodeでどのように見えるかです: -
重要な部分は、属性インスペクタパネルの上部で、グラデーションの開始と終了の色とグラデーションの角度を簡単に設定することができます。
あなたが必要なコードの主要部分は、以下の貼り付けられます。上記のリンクをたどって、それがどのように機能するかを説明します。
import UIKit
@IBDesignable
class LDGradientView: UIView {
// the gradient start colour
@IBInspectable var startColor: UIColor? {
didSet {
updateGradient()
}
}
// the gradient end colour
@IBInspectable var endColor: UIColor? {
didSet {
updateGradient()
}
}
// the gradient angle, in degrees anticlockwise from 0 (east/right)
@IBInspectable var angle: CGFloat = 270 {
didSet {
updateGradient()
}
}
// the gradient layer
private var gradient: CAGradientLayer?
// initializers
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
installGradient()
}
override init(frame: CGRect) {
super.init(frame: frame)
installGradient()
}
// Create a gradient and install it on the layer
private func installGradient() {
// if there's already a gradient installed on the layer, remove it
if let gradient = self.gradient {
gradient.removeFromSuperlayer()
}
let gradient = createGradient()
self.layer.addSublayer(gradient)
self.gradient = gradient
}
// Update an existing gradient
private func updateGradient() {
if let gradient = self.gradient {
let startColor = self.startColor ?? UIColor.clear
let endColor = self.endColor ?? UIColor.clear
gradient.colors = [startColor.cgColor, endColor.cgColor]
let (start, end) = gradientPointsForAngle(self.angle)
gradient.startPoint = start
gradient.endPoint = end
}
}
// create gradient layer
private func createGradient() -> CAGradientLayer {
let gradient = CAGradientLayer()
gradient.frame = self.bounds
return gradient
}
// create vector pointing in direction of angle
private func gradientPointsForAngle(_ angle: CGFloat) -> (CGPoint, CGPoint) {
// get vector start and end points
let end = pointForAngle(angle)
//let start = pointForAngle(angle+180.0)
let start = oppositePoint(end)
// convert to gradient space
let p0 = transformToGradientSpace(start)
let p1 = transformToGradientSpace(end)
return (p0, p1)
}
// get a point corresponding to the angle
private func pointForAngle(_ angle: CGFloat) -> CGPoint {
// convert degrees to radians
let radians = angle * .pi/180.0
var x = cos(radians)
var y = sin(radians)
// (x,y) is in terms unit circle. Extrapolate to unit square to get full vector length
if (fabs(x) > fabs(y)) {
// extrapolate x to unit length
x = x > 0 ? 1 : -1
y = x * tan(radians)
} else {
// extrapolate y to unit length
y = y > 0 ? 1 : -1
x = y/tan(radians)
}
return CGPoint(x: x, y: y)
}
// transform point in unit space to gradient space
private func transformToGradientSpace(_ point: CGPoint) -> CGPoint {
// input point is in signed unit space: (-1,-1) to (1,1)
// convert to gradient space: (0,0) to (1,1), with flipped Y axis
return CGPoint(x: (point.x + 1) * 0.5, y: 1.0 - (point.y + 1) * 0.5)
}
// return the opposite point in the signed unit square
private func oppositePoint(_ point: CGPoint) -> CGPoint {
return CGPoint(x: -point.x, y: -point.y)
}
// ensure the gradient gets initialized when the view is created in IB
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
installGradient()
updateGradient()
}
}
ありがとう、これは私が探していたものです – Vikas
- 1. iOSの4点勾配
- 2. iOSの勾配transparenyマスク
- 3. 勾配のない勾配
- 4. テンソルフローカスタム勾配
- 5. Matlabの勾配
- 6. はTypeError:勾配
- 7. テンソルの勾配
- 8. 勾配エフェクトIE
- 9. 直線勾配
- 10. CSS3スワール勾配
- 11. 勾配は、MATLAB
- 12. IE9勾配-ms
- 13. TensorFlowカスタム勾配
- 14. は勾配
- 15. バックグラウンド勾配
- 16. SVGテキストサイズ勾配
- 17. iOSデバイスで勾配が働いていません
- 18. Matlab:スカラーフィールドの勾配
- 19. CSSの勾配を
- 20. 勾配降下ランタイムエラー
- 21. パーリンノイズ勾配関数
- 22. 勾配付きポリライン
- 23. 円勾配とWPF
- 24. WPFのパス勾配
- 25. カスタム勾配BackgroundViewは
- 26. 勾配は、リンクで
- 27. Lasagne/Theano勾配値
- 28. アンドロイド用勾配ジェネレータ
- 29. サブテンソルのTheano勾配
- 30. QSliderで絶対勾配とチャンク勾配を使用する
正確にするには、作成時に使用した正確なパラメータについてデザイナーに問い合わせる必要があります。あなたは開始色、終了色が必要で、それは私、開始点と終了点に線形に見えるので。実際に放射状の場合は、中心と半径が必要です。複数の点があるかもしれません - もしそうなら、あなたはそれらとその関連する色が必要です。 –