• 手表(锚点)


    //

    //  ViewController.m

    //  UI-NO-37-1 模拟手表

    //

    //  Created by 容伟 on 15/9/16.

    //  Copyright (c) 2015年 容伟. All rights reserved.

    //

     

    #import "ViewController.h"

     

    @interface ViewController ()

    {

        CALayer *sLayer; // 秒针

        CALayer *mLayer; // 分针

        CALayer *hLayer; // 时针

        

        

     

    }

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

     

    //  表盘

        [self addWatchFace];

    //  秒针

        [self pointLayer];

     

        CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(fireTime)];

        [link addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

        

    //    定时器 调用指针旋转

    //    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(fireTime) userInfo:nil repeats:YES];

     

    }

     

     

    //   添加表盘

    - (void)addWatchFace {

        UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"表盘" ofType:@"png"]];

        

        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

        imageView.frame = CGRectMake(0, 0, image.size.width/3, image.size.height/3);

        imageView.center = self.view.center;

        [self.view addSubview:imageView];

    }

     

    - (void)pointLayer {

    //  秒针  分针  时针

        UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"指针" ofType:@"png"]];

        sLayer = [[CALayer alloc] init];

        sLayer.bounds = CGRectMake(0, 0, image.size.width/8, image.size.height/4);

        sLayer.position = self.view.center;

        sLayer.anchorPoint = CGPointMake(0.5, 0.65);

        sLayer.contents = (__bridge id)(image.CGImage);

        [self.view.layer addSublayer:sLayer];

        

    //  分针

        mLayer = [[CALayer alloc] init];

        mLayer.bounds = CGRectMake(0, 0, image.size.width/7, image.size.height/5);

        mLayer.position = self.view.center;

        mLayer.anchorPoint = CGPointMake(0.5, 0.65);

        mLayer.contents = (id)image.CGImage;

        [self.view.layer addSublayer:mLayer];

     

    //  时针

        hLayer = [[CALayer alloc] init];

        hLayer.bounds = CGRectMake(0, 0, image.size.width/6, image.size.height/7);

        hLayer.position = self.view.center;

        hLayer.anchorPoint = CGPointMake(0.5, 0.65);

        hLayer.contents = (id)image.CGImage;

        [self.view.layer addSublayer:hLayer];

     

     

    }

     

    // 定时器 调用方法

    - (void)fireTime {

        NSCalendar *calendar = [NSCalendar currentCalendar];

        

        //    获得当前的时间 小时

        //    component:fromDate: 从日历里面的某个日期 获得某个组件

        NSInteger h =[calendar component:NSCalendarUnitHour fromDate:[NSDate date]];

    //    NSLog(@"%ld", (long)h);

        

        //    获得当前时间 分

        NSInteger m =[calendar component:NSCalendarUnitMinute fromDate:[NSDate date]];

        

        //    获得当前时间 秒

        NSInteger s =[calendar component:NSCalendarUnitSecond fromDate:[NSDate date]];

        sLayer.transform = CATransform3DMakeRotation(M_PI/30*s, 0, 0, 1);

        

    #warning 有错

        mLayer.transform = CATransform3DMakeRotation(M_PI/30*m + (M_PI/(30*60))*s, 0, 0, 1);

        hLayer.transform = CATransform3DMakeRotation(M_PI/6*h + (M_PI/(6*60))*m, 0, 0, 1);

    }

     

     

     

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

     

    @end

     

  • 相关阅读:
    Vue 之 JSX 初识篇
    vue3中ref和reactive的区别
    【PostgreSQL】PostgreSQL中的序列
    【PostgreSQL】PostgreSQL的vacuum调优和客户化调度vacuum任务
    【PostgreSQL】PostgreSQL将异步复制转换成同步复制
    【MySQL】xtrabackup: Fatal error: cannot find ./xtrabackup_logfile
    【PostgreSQL】PostgreSQL内存使用高该检查哪些内容
    PPT学习
    【PostgreSQL】PostgreSQL复制延迟该检查哪些内容
    【PostgreSQL】PostgreSQL复制的监控
  • 原文地址:https://www.cnblogs.com/wukun16/p/4884165.html
Copyright © 2020-2023  润新知