草庐IT

ios - 是否可以访问 iOS 系统动画的属性?

coder 2024-01-26 原文

是否可以获取内置 iOS 系统动画的动画属性(速度和缓动曲线)?具体来说,当您隐藏或显示状态栏时,UIStatusBarAnimationSlide。现在我只是盯着它看,并想出了一个很好的匹配:使用默认动画曲线的 0.35 秒。这很好用,但 Apple 可能会在未来的 iOS 更新中更改这样的动画,最好完全匹配它而不依赖于我自己想出的硬编码值。

值得一提的是,这是我的 View Controller 在我点击 View 以隐藏状态栏并调整 View 大小以填充屏幕时调用的方法。

-(void)tappedView:(UIGestureRecognizer *)gestureRecognizer
{
    UIApplication *app = [UIApplication sharedApplication];
    // First, toggle the visibility of the status bar
    [[UIApplication sharedApplication] setStatusBarHidden:![app isStatusBarHidden] withAnimation:UIStatusBarAnimationSlide];
    // Then scale this view controller's view, attempting to match the built-in
    // UIStatusBarAnimationSlide animation
    [UIView animateWithDuration:.35
            animations:^{
                self.view.frame = [UIScreen mainScreen].applicationFrame;
            }];
}

顺便说一句,令我惊讶的是,当状态栏被隐藏时,我找不到一种内置的方法来处理调整 VC View 的大小。毕竟,如果在通话过程中状态栏的高度加倍, View 会自动调整大小。告诉我我遗漏了什么,还有一种方法可以让 View 也自动增长

最佳答案

这是我在我的应用中使用的一段代码:

- (void)application:(UIApplication *)application willChangeStatusBarFrame:
    (CGRect)oldStatusBarFrame {
    [UIView animateWithDuration:0.355f animations:^{
        if(floating_point_values_are_equal(oldStatusBarFrame.size.height, 20.0f)) {
            for(UIViewController* VC in self.tabBarController.viewControllers) {
                UIView* view = VC.view;
                [view setTransform:CGAffineTransformMakeScale(1.0f, 1.0f)];
            }
        } else {
            for(UIViewController* VC in self.tabBarController.viewControllers) {
                UIView* view = VC.view;
                CGFloat ratio = (view.frame.size.height - 20) / view.frame.size.height;

                [view setTransform:CGAffineTransformMakeScale(1.0f, ratio)];
            }
        }
    }];
}

它基本上根据新的屏幕尺寸缩放整个应用程序。它之所以有效,是因为比例不是很大的变化 - 为新的 iPhone 屏幕这样做看起来不对。

关于ios - 是否可以访问 iOS 系统动画的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12700554/

有关ios - 是否可以访问 iOS 系统动画的属性?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  5. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  6. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  7. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  8. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  9. ruby - 多个属性的 update_column 方法 - 2

    我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2

  10. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

随机推荐