- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
所以我还没有做到这一点,我正在尝试如何做到这一点。所以我制作了一个 UITableView,每个单元格都有一个关联的 NSTimer。现在在每个自定义 UITableViewCell 中,我都有一个 UIProgressView 作为背景,拉伸(stretch)以填充单元格。现在我想在 UIProgressView 上添加一个带有剩余时间的 UILabel。但是由于进度条填充颜色和背景颜色有很大不同(海军蓝色进度填充和白色背景/非填充区域),我想知道如何在进度条填充时动态更改文本颜色。就像 UILabel 中深蓝色填充的部分一样,文本颜色应该是白色。在白色背景上的部分,文本应该是黑色的。 Something like this, but in objective-c.
最佳答案
刚刚为你破解了这个 :)
这是 ZWProgressView 的模拟器结果:
这是一个示例用法:
#import "ViewController.h"
#import "ZWProgressView.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
ZWProgressView *progressView = [[ZWProgressView alloc] init];
progressView.frame = CGRectMake((self.view.bounds.size.width - 200) / 2.0, self.view.bounds.size.height / 2.0 - 25.0, 200, 50);
progressView.progress = 0.47;
[self.view addSubview:progressView];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
注意:屏蔽代码取自:
Simply mask a UIView with a rectangle
头文件
#import <UIKit/UIKit.h>
@interface ZWProgressView : UIView
@property (nonatomic, assign) CGFloat progress;
@property (nonatomic, strong) UIColor *normalTextColor;
@property (nonatomic, strong) UIColor *maskedTextColor;
@property (nonatomic, strong) UIView *container;
@property (nonatomic, strong) UIView *progressBar;
@property (nonatomic, strong) UILabel *progressLabel;
@property (nonatomic, strong) UILabel *maskedProgressLabel;
@property (nonatomic, strong) UIView *mask;
@end
实现文件
#import "ZWProgressView.h"
@interface ZWProgressView()
{
NSLayoutConstraint *progressBarWidthConstraint;
NSLayoutConstraint *progressBarMaskWidthConstraint;
}
@end
@implementation ZWProgressView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.frame = frame;
[self initView];
[self addAllConstraints];
}
return self;
}
-(void)initView
{
self.layer.cornerRadius = 2.0;
self.backgroundColor = [UIColor colorWithRed:0.85 green:0.85 blue:0.85 alpha:1.0];
self.normalTextColor = [UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:1.0];
self.maskedTextColor = [UIColor whiteColor];
self.container = [[UIView alloc] init];
self.container.layer.borderWidth = 1.0;
self.container.layer.borderColor = [UIColor grayColor].CGColor;
self.container.backgroundColor = [UIColor whiteColor];
self.container.layer.cornerRadius = 3.0;
self.container.clipsToBounds = YES;
self.progressBar = [[UIView alloc] init];
self.progressBar.backgroundColor = [UIColor colorWithRed:0.2 green:0.3 blue:0.8 alpha:1.0];
self.progressLabel = [[UILabel alloc] init];
self.progressLabel.font = [UIFont fontWithName:@"Arial-BoldMT" size:30];
self.progressLabel.textAlignment = NSTextAlignmentCenter;
self.progressLabel.textColor = self.normalTextColor;
self.progressLabel.clipsToBounds = YES;
self.maskedProgressLabel = [[UILabel alloc] init];
self.maskedProgressLabel.font = self.progressLabel.font;
self.maskedProgressLabel.textAlignment = self.progressLabel.textAlignment;
self.maskedProgressLabel.textColor = self.maskedTextColor;
self.maskedProgressLabel.clipsToBounds = YES;
self.mask = [[UIView alloc] init];
[self.container addSubview:self.progressBar];
[self.container addSubview:self.progressLabel];
[self.container addSubview:self.maskedProgressLabel];
[self.container addSubview:self.mask];
[self addSubview:self.container];
}
-(void)addAllConstraints
{
self.container.translatesAutoresizingMaskIntoConstraints = NO;
self.progressBar.translatesAutoresizingMaskIntoConstraints = NO;
self.progressLabel.translatesAutoresizingMaskIntoConstraints = NO;
self.maskedProgressLabel.translatesAutoresizingMaskIntoConstraints = NO;
self.mask.translatesAutoresizingMaskIntoConstraints = NO;
id views = @{@"container": self.container, @"progressBar": self.progressBar, @"progressLabel": self.progressLabel, @"maskedProgressLabel": self.maskedProgressLabel, @"mask": self.mask};
// container constraint
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[container]-5-|" options:0 metrics:nil views:views]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[container]-5-|" options:0 metrics:nil views:views]];
// progressBar constraint
[self.container addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[progressBar]" options:0 metrics:nil views:views]];
progressBarWidthConstraint = [NSLayoutConstraint constraintWithItem:self.progressBar attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0];
[self.container addConstraint:progressBarWidthConstraint];
[self.container addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[progressBar]|" options:0 metrics:nil views:views]];
// progressLabel constraint
[self.container addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[progressLabel]|" options:0 metrics:nil views:views]];
[self.container addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[progressLabel]|" options:0 metrics:nil views:views]];
// maskedProgressLabel constraint
[self.container addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[maskedProgressLabel]|" options:0 metrics:nil views:views]];
[self.container addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[maskedProgressLabel]|" options:0 metrics:nil views:views]];
// mask constraint
[self.container addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[mask]" options:0 metrics:nil views:views]];
[self.container addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[mask]|" options:0 metrics:nil views:views]];
progressBarMaskWidthConstraint = [NSLayoutConstraint constraintWithItem:self.mask attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0];
[self.container addConstraint:progressBarMaskWidthConstraint];
}
-(void)setProgress:(CGFloat)progress
{
int percentage = progress * 100;
NSString *strProgress = [[NSString alloc] initWithFormat:@"%d%%", percentage];
self.progressLabel.text = strProgress;
self.maskedProgressLabel.text = strProgress;
// ------------------------------------------------------------------
// subtracting 10 pixel for the |-5-[progressBar]-5-| padding in
// the constraint for the progresBar
// ------------------------------------------------------------------
progressBarWidthConstraint.constant = progress * (self.bounds.size.width - 10.0);
progressBarMaskWidthConstraint.constant = progressBarWidthConstraint.constant;
[self layoutIfNeeded];
[self updateMask];
}
-(void)updateMask
{
// ------------------------------------------------------------------------
// Masking code taken from:
//
// https://stackoverflow.com/questions/11391058/simply-mask-a-uiview-with-a-rectangle
// ------------------------------------------------------------------------
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGRect maskRect = CGRectMake(0, 0, progressBarMaskWidthConstraint.constant, self.mask.bounds.size.height);
CGPathRef path = CGPathCreateWithRect(maskRect, NULL);
maskLayer.path = path;
CGPathRelease(path);
self.maskedProgressLabel.layer.mask = maskLayer;
}
@end
关于ios - 具有多种颜色的 UIProgressView 上的 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24275603/
你好, 过去一周我一直在尝试解决如何在我的 viewController 中创建两个 progressView 的问题,但几乎没有成功。请参阅我附上的图表,作为我提出的问题的想法。 我正在创建一个带有
我似乎有与大多数人相反的问题。我在我的 UIProgressView(它被添加到我的单元格 View )上调用 setProgress。我没有动画调用它,但变化似乎是动画的,我似乎无法将其关闭。 我看
我有一个带有三个选项卡的选项卡栏应用程序。在我的第二个选项卡 View 中,我有一个 UIProgressView。我的 viewDidLoad 方法中有一个 NSTimer,它调用更新 Progre
我有一个 UIProgressView,我试图更改进度,但从未更新。我的“慢”操作是从 NSOperation/NSOperation 队列完成的,因此它应该是多线程的。 您是否已经经历过这种情况或者
我有一个 UIProgressView 作为 subview 添加到 self.view 中。我有一个已加载行的 UITableView。我需要每一行都有图像,但我不希望应用程序等待所有图像,因此我决
我有一个UIProgressView,我希望它看起来像这个图像。我已经设置了进度颜色,但不确定是否设置未进度颜色(图像中的白色)。 最佳答案 这是我自己在探索 UIProgressView 属性时发现
我正在使用 UIProgressView在我的应用程序中,现在运行良好。但我想让它更大(在高度方面)并将其着色为不同的颜色。 我正在寻找使用 PDColoredProgressView 为颜色,并更改
我的新应用程序有小问题。一开始我以为这只是线程的问题,但现在我觉得我必须重写一半的代码来修复它。在此之前,也许你会帮助我:) 现在我正在编写将从服务器下载东西的应用程序。我们有两个对象:MainVie
我正在使用 CKOperation 将记录数组保存在云套件中,如下所示并使用进度 View 显示进度。 let saveOperation = CKModifyRecordsOperation
我做了一些 HTTP 请求,在收到 HTTP 响应时设置类属性,并使用 willSet 更新进度条值。进度条动画仅运行一次。 var data: CompatibilityData? { di
我使用 Xcode 10 和 Swift 4.2 在 UIViewController 的 viewDidload() 中,我声明了一个观察者: override func viewDidLoad()
我目前正在开发一个基于测验的 iOS 应用程序。我想添加一个进度条,根据问题的回答是否正确来改变颜色。根据回答是否正确,我只想将该间隔更改为绿色/红色,而不是整个条形。我的进度条有 50 个间隔。我尝
如果我的术语不正确,我深表歉意 - 我学习 Objective C 才几天,所以我还是有点陌生。 我有一个 ViewController,它有一个进度条 (UIProgressView),它使用
我有一个 UIProgressView 我想在我的 GLKViewController 上运行,而其余代码正在由 iOS 加载。我已将 UIProgressView 放入我的“viewDidLoad”
我有一个以编程方式添加到 Storyboard View 的 UIProgressView 以及将其放置在导航栏底部的约束。有一个菜单,打开时会暂时隐藏导航栏,关闭时会再次取消隐藏。打开和关闭此菜单后
我使用 asihttprequest 下载多个文件,我想知道如何在下载完成后通过正确的请求删除关联的 UIProgressview。 NSMutableArray *contentArray 包含 A
有没有办法让 progressTintColor 变成渐变色?具体来说,我想让它成为从绿色到红色的渐变色 - 标准温度模式。 添加子层不起作用,因为它把层放在 View “后面”: CAGradien
我正在将进度设置为 UIProgressView : [recordingProgress setProgress:seconds/600 animated:YES]; 该行位于一个不断重复的计时器中
遵循 this question 中概述的答案,我设法让 UIProgressView 有点工作,但它似乎在它应该之前完成更新(即栏“填满”)。 我尝试添加一些日志语句来查看发生了什么: float
我有一个从服务器下载图片的应用程序。我想向用户展示进度。我已经在苹果文档上阅读了有关 UIProgressView 的内容,并在该网站上阅读了许多答案,但我无法让它工作。这是我的代码在我的 viewD
我是一名优秀的程序员,十分优秀!