【问题标题】:How to create a digital clock with custom images for hours and seconds in iPhone?如何在 iPhone 中创建带有自定义图像的小时和秒数字时钟?
【发布时间】:2011-10-03 06:33:44
【问题描述】:

我有 10 张从 0 到 10 的图像来设置我的数字时钟的小时和分钟。我对如何将自定义图像设置为数字时钟以使其开始工作感到困惑。

这是我的代码:

- (void)viewDidLoad {
    //timer to recursively call the showClock method.
    timer=[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(showClock) userInfo:nil repeats:YES];  
    [super viewDidLoad];
}



-(void)showClock
{
    NSDate *dateShow= [NSDate dateWithTimeIntervalSinceNow:0];
    NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormat setTimeStyle:NSDateFormatterMediumStyle];
    NSString *dateString = [dateFormat stringFromDate:dateShow];


    NSDate * date = [NSDate date];
    NSCalendar * calendar = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents * components =
    [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:date];

    NSInteger hour = [components hour];
    NSInteger minute = [components minute];
    NSInteger firstHourDigit = hour/60;
    NSInteger secondHourDigit = hour%60;
    NSInteger firstMinuteDigit = minute/60;
    NSInteger secondMinuteDigit = minute%60;
    [minfirstImage setImage:[UIImage imageNamed:[NSString stringWithFormat:@"0.png", firstHourDigit]]];
    [minsecondImage setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%0.png",secondHourDigit]]];
    [secfirstImage setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%0.png",firstMinuteDigit]]];
    [secSecondImage setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%0.png",secondMinuteDigit]]];


}

当我运行我的应用程序时,图像视图没有与图像一起显示。可能是什么问题?计算有问题吗?

【问题讨论】:

  • 你知道如何使用 UIImageView 吗?
  • @taskinoor 是的,我知道使用 uiimageview
  • 那么问题到底出在哪里?你不知道如何维护一个定时器,或者你不知道如何获取当前时间,或者你不知道如何根据定时器改变图像?请更具体。
  • @taskinoor 我不知道如何根据计时器更改图像,即当它是 12.45 时,图像将如何在第一个小时数字从 0.png 更改为 1.png
  • 请尝试添加4个图像视图,每个数字一个,并通过计时器每分钟更改每个图像的图像

标签: iphone objective-c


【解决方案1】:

拉尼...

我认为使用不同的图像来计时会增加您的应用程序大小,所以我有一个建议给您,只需检查此代码并根据您的要求进行更改,我认为这是根据需要显示时间的最佳方式,

对于此代码,您只需创建一个没有文字的背景图像...

- (void)viewDidLoad {
        [super viewDidLoad];

        [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(showClock) userInfo:nil repeats:YES];  
        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem;
    }



-(void)showClock
{
    NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDate* now = [NSDate date]; 
    int h = [[cal components:NSHourCalendarUnit fromDate:now] hour];
    int m = [[cal components:NSMinuteCalendarUnit fromDate:now] minute];
    int s = [[cal components:NSSecondCalendarUnit fromDate:now] second];
    [cal release];


//    NSInteger firstHourDigit = hour/60;
//    NSInteger secondHourDigit = hour%60;
//    NSInteger firstMinuteDigit = minute/60;
//    NSInteger secondMinuteDigit = minute%60;

    NSLog(@"\n Time :%d : %d : %d",h,m,s);


    [imgViewHour setImage:[self getImageFor:[NSString stringWithFormat:@"%d",h]]];
    [imgViewMnt setImage:[self getImageFor:[NSString stringWithFormat:@"%d",m]]];
    [imgViewSec setImage:[self getImageFor:[NSString stringWithFormat:@"%d",s]]];


}



-(UIImage *)getImageFor:(NSString*)txt {


        int w =50,h=35;


        UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(3, 3, w-6, h-6)];
        lbl.text = txt;
        lbl.textColor = [UIColor whiteColor];
        lbl.textAlignment = UITextAlignmentCenter;
        lbl.font = [UIFont fontWithName:@"Arial" size:18];
        lbl.font = [UIFont boldSystemFontOfSize:14];
        [lbl setBackgroundColor:[UIColor clearColor]];
        lbl.shadowOffset=CGSizeMake(0,2);
        lbl.shadowColor = [UIColor blackColor];


        UIView *viewImage = [[UIView alloc] initWithFrame:CGRectMake(0, 0, w, h)];

        [viewImage setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"imageBackGround.png"]]];
        [viewImage addSubview:lbl];

        UIGraphicsBeginImageContext(viewImage.bounds.size);
        [viewImage.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *Image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        [viewImage release];

        return Image;

    }

谢谢... :)

【讨论】:

    【解决方案2】:

    将图片名称取自 0.png-9.png 并尝试使用下面的代码它会帮助你

    NSDate *dateShow= [NSDate dateWithTimeIntervalSinceNow:0];
    NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormat setTimeStyle:NSDateFormatterMediumStyle];
    NSString *dateString = [dateFormat stringFromDate:dateShow];
    
    
    NSDate * date = [NSDate date];
    NSCalendar * calendar = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents * components =
    [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:date];
    
    NSInteger hour = [components hour];
    NSInteger minute = [components minute];
    NSInteger firstHourDigit = hour/10;
    NSInteger secondHourDigit = hour%10;
    NSInteger firstMinuteDigit = minute/10;
    NSInteger secondMinuteDigit = minute%10;
    int res=0;
    for(int i =0;i<4;i++)
    {
    
        if(i==0)
             res = firstHourDigit;
        else if(i==1)
            res = secondHourDigit;
        else if (i==2)
            res = firstMinuteDigit;
        else 
            res = secondMinuteDigit;
            NSString *str_imageName;
    switch (res) {
    
        case 0:
            str_imageName=@"0.png";
            break;
        case 1:
            str_imageName=@"1.png";
            break;
        case 2:
            str_imageName=@"2.png";
            break;
        case 3:
            str_imageName=@"3.png";
            break;
        case 4:
            str_imageName=@"4.png";
            break;
        case 5:
            str_imageName=@"5.png";
            break;
        case 6:
            str_imageName=@"6.png";
            break;
        case 7:
            str_imageName=@"7.png";
            break;
        case 8:
            str_imageName=@"8.png";
            break;
        case 9:
            str_imageName=@"9.png";
            break;
    
        default:
            break;
    }
        if(i==0)
            [minfirstImage setImage:[UIImage imageNamed:str_imageName]];
        else if(i==1)
            [minsecondImage setImage:[UIImage imageNamed:str_imageName]];
        else if (i==2)
            [secfirstImage setImage:[UIImage imageNamed:str_imageName]];
        else 
            [secSecondImage setImage:[UIImage imageNamed:str_imageName]];
    
    
    }
    

    【讨论】:

    • 在我忘记分号之前检查一下
    【解决方案3】:

    维护一个 UIImages 数组,然后逐个字符分解字符串以查看其中的数字:

    create array for images
    load images into array
    
    create array for imageviews
    put imageviews into array
    
    loop 5 times
    if we're on 2 then skip // dot
    else create substring from that character and call integerValue on it
    use that as index into array
    set imageview at index to image at index
    

    【讨论】:

    • 我完全糊涂了。请你详细解释我或给我一些示例代码
    猜你喜欢
    • 2012-04-06
    • 2017-07-25
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2017-08-15
    • 2011-01-22
    相关资源
    最近更新 更多