与 NSTimer 一起使用时显示刻度动画而不是平滑动画的进度条

     2023-02-24     205

关键词:

【中文标题】与 NSTimer 一起使用时显示刻度动画而不是平滑动画的进度条【英文标题】:progress bar showing tick animation instead of smooth animation when used with NSTimer 【发布时间】:2014-05-11 08:02:33 【问题描述】:

我正在使用 NSTimer 和循环进度条作为倒数计时器,即 15 秒

它使用以下代码,但我得到进度条的刻度动画而不是平滑动画,如何使其平滑动画

- (void)viewDidLoad
        
            [super viewDidLoad];
           self.labeledLargeProgressView.roundedCorners = NO;
            self.labeledLargeProgressView.trackTintColor =[UIColor colorWithRed:0.0f/255.0f       green:173.0f/255.0f blue:255.0f/255.0f alpha:1.0f];
            self.labeledLargeProgressView.progressTintColor =[UIColor colorWithRed:255.0f/255.0f    green:96.0f/255.0f blue:88.0f/255.0f alpha:1.0f];
            self.labeledLargeProgressView.thicknessRatio = 1.0f;
            self.labeledLargeProgressView.clockwiseProgress = YES;
            [self.view addSubview:self.labeledLargeProgressView];
            seconds = 15.0;
            [self startAnimation];
        

- (void)progressChange


    CGFloat progress ;
    DALabeledCircularProgressView *labeledProgressView = self.labeledLargeProgressView;
    if(labeledProgressView.progress >=1.0f && [self.timer isValid])
        [self stopAnimation];
         seconds = 15.0f;
    
    else
        progress=labeledProgressView.progress + 0.06666667f;
        [labeledProgressView setProgress:progress animated:YES];
        seconds --;
        labeledProgressView.progressLabel.text = [NSString stringWithFormat:@"%i", seconds];
    




- (void)startAnimation

    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                  target:self
                                                selector:@selector(progressChange)
                                                userInfo:nil
                                                 repeats:YES];
    self.continuousSwitch.on = YES;


- (void)stopAnimation

    [self.timer invalidate];
    self.timer = nil;
    self.continuousSwitch.on = NO;

【问题讨论】:

好的我自己解决了..我会更新答案 【参考方案1】:

我发现的是一组 UIview 动画和进度视图动画,它们工作得更好,并且可以流畅地动画进度视图。如果你只是使用动画和进度视图动画的组合,它会直接触发而不考虑 UIview 动画计时器。

-(void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];
    timer = [NSTimer scheduledTimerWithTimeInterval: 1.0f
                                             target: self
                                           selector: @selector(updateTimer)
                                           userInfo: nil
                                            repeats: YES];



- (void)updateTimer

    if (progressView.progress >= 1.0) 
        [timer invalidate];
    
    [UIView animateWithDuration:1 animations:^
        float newProgress = [self.progressView progress] + 0.125;
        [self.progressView setProgress:newProgress animated:YES];
    ];

随意调整动画时间以获得更好、更流畅的过渡

【讨论】:

【参考方案2】:

我自己解决了我所做的是我更频繁地更新 0.1f 而不是 1.0f

- (void)progressChange


    CGFloat progress ;
    DALabeledCircularProgressView *labeledProgressView = self.labeledLargeProgressView;
    if(labeledProgressView.progress >=1.0f && [self.timer isValid])
        [self stopAnimation];
         seconds = 15.0f;
        _counter = 0;
    
    else
        progress=labeledProgressView.progress + 0.00666667f;
        _counter ++;
        [labeledProgressView setProgress:progress animated:YES];
        if(_counter % 10 == 0)
            seconds --;
        
        labeledProgressView.progressLabel.text = [NSString stringWithFormat:@"%i", seconds];
    





- (void)startAnimation

    self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1
                                                  target:self
                                                selector:@selector(progressChange)
                                                userInfo:nil
                                                 repeats:YES];
    self.continuousSwitch.on = YES;

【讨论】:

您可能应该删除您的问题;我怀疑这个答案会帮助任何人。 如果您每 0.1 秒制作一次动画,您的动画可能仍然不是很流畅。每次屏幕更新时(通常约为 60 Hz),您都可以使用 CADisplayLink 获取回调。

将 Postman 与 ReactJS 和 MongooseDB 一起使用时显示“错误:套接字挂起”错误

】将Postman与ReactJS和MongooseDB一起使用时显示“错误:套接字挂起”错误【英文标题】:"Error:sockethangup"errordisplayedwhenusingPostmanwithReactJSandMongooseDB【发布时间】:2021-11-2007:45:39【问题描述】:我正在学习使用MongooseDB、Express... 查看详情

从 obj 文件加载时显示单色而不是纹理

...过改变照明来修复它,但它不起作用。我是Opengl的新手,使用cpplusplusguy的opengl教程系列来学习。我正在使用的图像!http: 查看详情

滚动到顶部边缘而不是底部边缘时显示 Div

...omedge【发布时间】:2014-10-1020:37:45【问题描述】:我正在使用来自here的代码,但是当顶部滚动到视图而不是底部时,我需要它来显示div,我该如何实现呢?JSFiddle$(document).ready(function()$(window).scroll(function()$(\'. 查看详情

与 Bootstrap 模态一起使用时显示在模态后面的 Angular ui-select 选项

】与Bootstrap模态一起使用时显示在模态后面的Angularui-select选项【英文标题】:Angularui-selectoptionsshowingbehindthemodalwhenusedwithBootstrapmodal【发布时间】:2016-09-1909:28:51【问题描述】:我面临Angularui-select的问题(替换HTML选择)。我添... 查看详情

将 backstack 与 ViewPager 一起使用

】将backstack与ViewPager一起使用【英文标题】:UsebackstackwithViewPager【发布时间】:2012-09-2415:24:45【问题描述】:我正在使用ViewPager在我的android应用中实现滑动。但是,我希望在用户使用后退按钮而不是结束活动时显示上一个片段... 查看详情

为啥 LibreOffice Impress 在每次按键时显示两个项目,而不是每个项目一个?

】为啥LibreOfficeImpress在每次按键时显示两个项目,而不是每个项目一个?【英文标题】:WhyLibreOfficeImpressdisplaystwoitemsateachkeypress,insteadofoneforeach?为什么LibreOfficeImpress在每次按键时显示两个项目,而不是每个项目一个?【发布时间... 查看详情

使用 afnetworking 拉 json 时显示加载动画

】使用afnetworking拉json时显示加载动画【英文标题】:Showingloadinganimationwhilepullingjsonwithafnetworking【发布时间】:2013-06-0920:05:21【问题描述】:我正在尝试使用MBProgressHUD在应用程序加载更多json数据时弹出加载动画。这是我用来调... 查看详情

extjs4 在按钮单击而不是鼠标悬停时显示工具提示

】extjs4在按钮单击而不是鼠标悬停时显示工具提示【英文标题】:extjs4displaytooltiponbuttonclickinsteadofmousehover【发布时间】:2012-12-1223:01:56【问题描述】:我正在尝试在下面的工具提示中添加一个点击监听器。我不希望在鼠标悬停... 查看详情

Okhttp 在与 volley 一起使用时显示泄漏警告

】Okhttp在与volley一起使用时显示泄漏警告【英文标题】:Okhttpshowingleakedwarningwhileusingwithvolley【发布时间】:2018-04-2919:28:29【问题描述】:在开发我的android应用程序时,我在Logcat中收到此警告WARNING:Aconnectiontohttps://...wasleaked.Didyouf... 查看详情

java示例代码_如何仅在活动启动而不是恢复时显示启动屏幕

java示例代码_如何仅在活动启动而不是恢复时显示启动屏幕 查看详情

如何在使用 AJAX、Django REST API 和 jQuery 以模式形式更新记录时显示外键字段名称而不是 ID

】如何在使用AJAX、DjangoRESTAPI和jQuery以模式形式更新记录时显示外键字段名称而不是ID【英文标题】:HowToShowForeignKeyFieldNameinsteadofIDwhenUPDATINGrecordsinamodalFormusingAJAX,DjangoRESTAPI&jQuery【发布时间】:2021-12-0201:29:26【问题描述】:我... 查看详情

使用 VBA 保存时显示“是不是要覆盖文件”对话框

】使用VBA保存时显示“是不是要覆盖文件”对话框【英文标题】:Gettingthe"Doyouwanttooverwritethefile"dialogboxtoshowwhensavingwithVBA使用VBA保存时显示“是否要覆盖文件”对话框【发布时间】:2015-06-2911:40:32【问题描述】:以下代码... 查看详情

图像仅在给定链接时显示,而不是路径 [重复]

】图像仅在给定链接时显示,而不是路径[重复]【英文标题】:ImageOnlyShowsWhenGivenaLink,NotaPath[duplicate]【发布时间】:2020-12-2100:56:58【问题描述】:我正试图在我的网站上展示一张图片,但遇到的麻烦比我想象的要多。我已经多次... 查看详情

点击表格视图单元格时显示图片

...白屏幕我尝试将单元格与不同的图像视图链接,但我不能使用tableview来做到这一点,那么所需的代码是什么我知道我应该使用prepareForSe 查看详情

多边形与 Openlayers 叠加时显示多个弹出窗口

...就是说,有时较大的多边形完全位于较小的多边形之上。使用Openlayers,是否可以显示两个弹出窗口而不是仅显示一个(第一个 查看详情

在点击文本字段时显示日期选择器

...本框相同。【问题讨论】:【参考方案1】:您可以为此使用文本字段 查看详情

如何在点击时显示 0:00 而不是 NaN:NaN

】如何在点击时显示0:00而不是NaN:NaN【英文标题】:Howtodisplay0:00insteadofNaN:NaNonclick【发布时间】:2020-07-1503:31:51【问题描述】:我有一个带有播放列表的音频播放器,但是当我单击新曲目时,它会短暂显示NaN:NaN,在此我有持续时... 查看详情

为啥我的代码在尝试显示 Math.random 值时显示 NaN 而不是整数?

】为啥我的代码在尝试显示Math.random值时显示NaN而不是整数?【英文标题】:WhyismycodedisplayingNaNinsteadofanintegerwhenattemptingtodisplayaMath.randomvalue?为什么我的代码在尝试显示Math.random值时显示NaN而不是整数?【发布时间】:2019-01-2701:44... 查看详情