为自定义活动指标更好地替代基于计时器的动画?

时间:2016-05-14 05:19:10

标签: ios swift animation nstimer

我有一个显示自定义不确定进度指示器的类。每个计时器更新它只是使用CGAffineTransformRotate增加UIImageView的旋转。

这一切都有效,但是,我注意到它在运行时,它正在等待的后台进程运行速度减慢了50% - 这是一个巨大的惩罚。例如;而不是说20秒完成处理它需要30秒。有人可以推荐性能下降的解决方案吗?

func show() {
    timer?.invalidate()
    timer = NSTimer.scheduledTimerWithTimeInterval(0.03, target: self, selector: #selector(self.updateTimer(_:)), userInfo: nil, repeats: true)
}

func updateTimer(sender: NSTimer) {
    iconView.transform = CGAffineTransformRotate(iconView.transform, 0.15)
}

2 个答案:

答案 0 :(得分:1)

使用Core Animation为旋转设置动画。窗口服务器将完成应用程序进程之外的所有工作。

let animation = CABasicAnimation(keyPath: "transform.rotation")
animation.fromValue = 0
animation.toValue = 2 * M_PI
animation.repeatCount = .infinity
animation.duration = 1.25
iconView.layer.addAnimation(animation, forKey: animation.keyPath)

答案 1 :(得分:0)

我认为你可以使用@ Rob的答案中的dispatch_source:

Do something every x minutes in Swift

以下是代码:

function generate_taxonomy_rewrite_rules( $wp_rewrite ) {

    $rules = array();

    $post_types = get_post_types( array( 'public' => true, '_builtin' => false ), 'objects' );
    $taxonomies = get_taxonomies( array( 'public' => true, '_builtin' => false ), 'objects' );

    foreach ( $post_types as $post_type ) {
        $post_type_name = $post_type->name;
        $post_type_slug = $post_type->rewrite['slug'];

        foreach ( $taxonomies as $taxonomy ) {
            if ( $taxonomy->object_type[0] == $post_type_name ) {
                $terms = get_categories( array( 'type' => $post_type_name, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0 ) );
                foreach ( $terms as $term ) {
                    $rules[$post_type_slug . '/' . $term->slug . '/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug;
                    $rules[$post_type_slug . '/' . $term->slug . '/page/?([0-9]{1,})/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug . '&paged=' . $wp_rewrite->preg_index( 1 );
                }
            }
        }
    }

    $wp_rewrite->rules = $rules + $wp_rewrite->rules;

}

add_action('generate_rewrite_rules', 'generate_taxonomy_rewrite_rules');