zoukankan      html  css  js  c++  java
  • 时钟

    @interface ViewController ()
    @property (nonatomic, weak) IBOutlet UIImageView *hourHand;
    @property (nonatomic, weak) IBOutlet UIImageView *minuteHand;
    @property (nonatomic, weak) IBOutlet UIImageView *secondHand;
    @property (nonatomic, weak) NSTimer *timer;
    @end
    @implementation ViewController
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        //adjust anchor points
        self.secondHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
        self.minuteHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
        self.hourHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
        //start timer
        self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick) userInfo:nil repeats:YES];
        //set initial hand positions
        [self updateHandsAnimated:NO];
    }
    - (void)tick
    {
        [self updateHandsAnimated:YES];
    }
    - (void)updateHandsAnimated:(BOOL)animated
    {
        //convert time to hours, minutes and seconds
        NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
        NSUInteger units = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
        NSDateComponents *components = [calendar components:units fromDate:[NSDate date]];
        CGFloat hourAngle = (components.hour / 12.0) * M_PI * 2.0;
        //calculate hour hand angle //calculate minute hand angle
        CGFloat minuteAngle = (components.minute / 60.0) * M_PI * 2.0;
        //calculate second hand angle
        CGFloat secondAngle = (components.second / 60.0) * M_PI * 2.0;
        //rotate hands
        [self setAngle:hourAngle forHand:self.hourHand animated:animated];
        [self setAngle:minuteAngle forHand:self.minuteHand animated:animated];
        [self setAngle:secondAngle forHand:self.secondHand animated:animated];
    }
    - (void)setAngle:(CGFloat)angle forHand:(UIView *)handView animated:(BOOL)animated
    {
        //generate transform
        CATransform3D transform = CATransform3DMakeRotation(angle, 0, 0, 1);
        if (animated) {
            //create transform animation
            CABasicAnimation *animation = [CABasicAnimation animation];
            [self updateHandsAnimated:NO];
            animation.keyPath = @"transform";
            animation.toValue = [NSValue valueWithCATransform3D:transform];
            animation.duration = 0.5;
            animation.delegate = self;
            [animation setValue:handView forKey:@"handView"];
            [handView.layer addAnimation:animation forKey:nil];
        } else {
            //set transform directly
            handView.layer.transform = transform;
        }
    }
    - (void)animationDidStop:(CABasicAnimation *)anim finished:(BOOL)flag
    {
        //set final position for hand view
        UIView *handView = [anim valueForKey:@"handView"];
        handView.layer.transform = [anim.toValue CATransform3DValue];
    }
  • 相关阅读:
    hdu 2639 Bone Collector II
    文件打包bundle
    iOS UITextField垂直居中
    Mac删除废纸篓中的单一文件和文件夹
    Swift 初见
    关于 Swift
    NSString和NSDate的转换
    iOS开发之iOS7设置状态栏字体颜色
    在当前界面中隐藏状态栏
    适合所有测试人员读的书籍
  • 原文地址:https://www.cnblogs.com/jingdizhiwa/p/5591621.html
Copyright © 2011-2022 走看看