我有一个CAGradientLayer我想缩放的用户拖动手指.但是,当我设置框架时,图层会动画为新尺寸.其他属性也会发生这种情况,包括start/endPoint.
这是一个例子:
_gradient.frame = CGRectMake(0, 480-toHeight, 320, toHeight);
Run Code Online (Sandbox Code Playgroud)
然而,如果我只在用户拖动10个左右的像素时调用它,则该图层不会简单地跳转到新的大小,而是以平滑但快速缓动的动画进行动画制作.我很肯定这不是在动画块中调用的.为了进一步调试,我还UIView为同一范围内的a框架设置了动画,并且没有动画.
我是新手CALayers,所以也许我做错了什么.
正如我在这里的问题中所讨论的,我尝试使用CAGradientLayer设置UITableView的背景颜色.我正在使用NSMutableArray中的一些值来填充UITableView,就像这样......
- (void)viewDidLoad
{
// ....
if (!navigationItems) {
navigationItems = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", @"4", nil];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSArray *colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:213.0f/255.0f green:91.0f/255.0f blue:92.0f/255.0f alpha:1.0f] CGColor][[UIColor colorWithRed:213.0f/255.0f green:0.0f blue:0.0f alpha:1.0f] CGColor], nil];
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.colors = colors;
gradientLayer.frame = tableView.bounds;
[tableView.layer insertSublayer:gradientLayer atIndex:0];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
cell.textLabel.text = [navigationItems objectAtIndex:indexPath.row];
cell.textLabel.textColor = [UIColor blackColor];
return cell;
}
Run Code Online (Sandbox Code Playgroud)
发生的情况是,使用初始值填充的单元格似乎与我设置的渐变颜色重叠.没有文字/边框出现在这些细胞(细胞值1,2, …
在我的表格视图控制器的以下代码中,如果我使用“库存”颜色,[UIColor blueColor]它可以正常工作,但是如果我尝试使用 RGBA 值创建自定义颜色,它会失败并且除了纯黑色之外不绘制任何东西。
这是因为 ARC 在可以使用之前释放了 CGColorRef 吗?我怎样才能让它与自定义颜色一起工作?
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
[cell setBackgroundColor:[UIColor clearColor]];
CAGradientLayer *selectedGrad = [CAGradientLayer layer];
selectedGrad.frame = cell.bounds;
UIColor* colorOne = [UIColor blueColor];//[UIColor colorWithRed:96/255 green:157/255 blue:227/255 alpha:1];
UIColor* colorTwo = [UIColor greenColor];//[UIColor colorWithRed:54/255 green:123/255 blue:201/255 alpha:1];
NSArray* colors = [NSArray arrayWithObjects:(id)colorOne.CGColor, colorTwo.CGColor, nil];
selectedGrad.colors = colors;
selectedGrad.locations = [NSArray arrayWithObjects:@(0.0), @(1.0), nil];
[cell setSelectedBackgroundView:[[UIView alloc] init]];
[cell.selectedBackgroundView.layer insertSublayer:selectedGrad atIndex:0];
}
Run Code Online (Sandbox Code Playgroud) 我在我的视图中添加了一个渐变图层,它在纵向模式下工作完美,在横向模式下不起作用.
func createGredientBackground() {
let layer = CAGradientLayer()
let center = UIColor(red: 249 / 255, green: 150 / 255, blue: 107 / 255, alpha: 1).CGColor
let end = UIColor(red: 247 / 255, green: 93 / 255, blue: 89 / 255, alpha: 1).CGColor
let start = UIColor(red: 255 / 255, green: 229 / 255, blue: 180 / 255, alpha: 1).CGColor
layer.colors = [start, center,end]
layer.frame = self.view.bounds //self.view.frame
print(layer.frame)
layer.startPoint = CGPointMake(0.0, 0.5)
layer.endPoint = CGPointMake(1.0, 0.5)
self.view.layer.insertSublayer(layer, atIndex: 0)
} …Run Code Online (Sandbox Code Playgroud) 我试图以编程方式向UIView添加渐变,但它无法正常工作.它似乎根本没有颜色.我附上了相关代码以及截图.注意我应用渐变的底部正方形.有人能帮我弄清楚我在做错了什么吗?

let sundayView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
setupViews()
setupSundayView()
}
func setupViews() {
sundayView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(sundayView)
}
func setupSundayView() {
sundayView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activateConstraints([
sundayView.centerXAnchor.constraintEqualToAnchor(view.centerXAnchor),
sundayView.topAnchor.constraintEqualToAnchor(fridayView.bottomAnchor, constant: 16.0),
sundayView.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor, constant: -8.0),
sundayView.heightAnchor.constraintEqualToAnchor(mondayView.heightAnchor),
sundayView.widthAnchor.constraintEqualToAnchor(mondayView.widthAnchor)
])
let gradient = CAGradientLayer()
gradient.frame = sundayView.bounds
gradient.colors = [
UIColor(red:1.00, green:0.37, blue:0.23, alpha:1.0).CGColor,
UIColor(red:1.00, green:0.16, blue:0.41, alpha:1.0).CGColor
]
sundayView.layer.insertSublayer(gradient, atIndex: 0)
}
Run Code Online (Sandbox Code Playgroud) 对于Swift中的iOS应用,我正在使用程序约束,并想将CAGradientLayer()添加到UIView()。下面是我的代码不起作用。
import UIKit
class ViewController: UIViewController {
let animationView: UIView = {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(animationView)
setupAnimationView()
animationView.addGradientLayer()
}
func setupAnimationView() {
animationView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
animationView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
animationView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
animationView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
}
}
extension UIView {
func addGradientLayer() {
let color1 = UIColor(red: 251/255, green: 55/255, blue: 91/255, alpha: 1.0)
let color2 = UIColor(red: 1.0, green: 70/255, blue: 0, alpha: 1.0) …Run Code Online (Sandbox Code Playgroud) 我正在构建一个iOS应用程序,我必须在其中实现自定义UISlider.问题是内置的UISlider不支持渐变轨道.另一个问题是我的UI样式指南显示当前跟踪值矩形应该是两种颜色的渐变,如图所示
如何构建UISlider的自定义版本?我想过要么继承现有的子类,要么构建一个UIControl子类.
我正在使用xcode 9.4和swift 4.2
提前致谢!
我正在尝试向UIView用作 a 的背景(backgroundRect)的 a添加渐变UITableViewCell。我希望渐变在与 backgroundRect 相同的 Z 位置绘制,但是在设备上构建时,它会遮挡(在顶部)我的标签和其他视图。但令人困惑的是,当我使用 ViewDebugger 时,它显示我的视图,好像它们应该出现在它们后面的渐变层?
class NewWorkoutTableViewCell: UITableViewCell {
@IBOutlet weak var backgroundRect: UIView!
@IBOutlet weak var dayOfTheWeekLabel: UILabel!
@IBOutlet weak var sessionTypeLabel: UILabel!
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var sessionTypeImage: UIImageView!
@IBOutlet weak var scoreLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
backgroundRect.layer.cornerRadius = 8.0
backgroundRect.layer.shadowColor = UIColor.black.cgColor
backgroundRect.layer.shadowOpacity = 0.5
backgroundRect.layer.shadowOffset = CGSize(width: 5, height: 5)
backgroundRect.layer.shadowRadius = 5
// this is making a CoreAnimation gradient layer
let …Run Code Online (Sandbox Code Playgroud) 这里有很多关于如何创建多色渐变的问题,但我正在努力的是在渐变区域很小的地方创建渐变。例如,我想查看 4 种颜色,并且我希望颜色之间的 3 个交叉点具有小渐变。
gradientLayer = CAGradientLayer()
gradientLayer.frame = gradientFrame
let locations = [Float](arrayLiteral: 0.3, 0.35, 0.8, 0.85)
gradientLayer.locations = locations.map { NSNumber(value: $0) }
gradientLayer.colors = [UIColor.red.cgColor,
UIColor.orange.cgColor,
UIColor.green.cgColor,
UIColor.gray.cgColor]
layer.insertSublayer(gradientLayer, at: 0)
Run Code Online (Sandbox Code Playgroud)
我在红色和橙色以及绿色和灰色之间得到了很好的渐变。但是橙色和绿色之间的渐变要大得多,看起来不太对。
我一直无法解决这个问题。任何解决方案?
在 iOS 中创建这样的图表的最佳方法是什么?
我的第一个想法是创建一条贝塞尔曲线路径,然后添加具有不同位置的渐变层。但这是行不通的,因为文档指定:
这些值必须单调递增。
我的图表中情况并非如此。
关于实现这一目标的好方法有什么想法吗?
谢谢
我正在尝试使用Scintilla组件的最新功能,该组件提供类似OSX的文本突出显示效果(黄色动画弹跳框),并且我遇到了间歇性弹出的错误:
EXC_BAD_ACCESS
指向这个特定的行:
if (layerFindIndicator!=nil)
if ([layerFindIndicator animationForKey:@"animateFound"])
[layerFindIndicator removeAnimationForKey:@"animateFound"];
Run Code Online (Sandbox Code Playgroud)
(ifs是我的;以防万一我把对象layerFindIndicator弄为零,或者解除分配或其他什么......不幸的是,它没有帮助......)
layerFindIndicator似乎是一个子类CAGradientLayer.(您可能会看到完整的代码layerFindIndicator,在这里).
既然,我是Quartz Core的绝对新手,请给我任何关于如何进行调试的提示?
cocoa exc-bad-access objective-c quartz-graphics cagradientlayer
我一直在测试CAGradientLayer为iOS和Mac OS X(Cocoa)创建渐变颜色.例如,我有以下代码行来为iOS创建渐变颜色.
let gradient: CAGradientLayer = CAGradientLayer()
gradient.frame = view.bounds
gradient.colors = [UIColor.orangeColor().CGColor,UIColor.redColor().CGColor]
gradient.locations = [0.1,0.9]
self.view.layer.insertSublayer(gradient,atIndex:0)
Run Code Online (Sandbox Code Playgroud)
现在,我所拥有的是一系列颜色(UIColor或NSColor),具体取决于开发平台.如果我以编程方式创建一个包含UIColor(或NSColor)对象的数组,则以
var cArray = [UIColor]()
Run Code Online (Sandbox Code Playgroud)
要么
var cArray = [NSColor]()
Run Code Online (Sandbox Code Playgroud)
,如何创建包含CGColors的数组?我在想这个话题可能是相关的.一个问题是我不知道如何声明和初始化CGColor对象的数组.
谢谢
cagradientlayer ×13
ios ×12
swift ×7
iphone ×2
objective-c ×2
uitableview ×2
calayer ×1
cgcolor ×1
cocoa ×1
cocoa-touch ×1
gradient ×1
quartz-core ×1
uibezierpath ×1
uibutton ×1
uikit ×1
uislider ×1
uiview ×1