Analóg óra változó háttérrel

Analóg órát fogunk hip-hop készíteni 🙂 Ehhez először keress a neten egy neked tetsző óra képet amin nincs mutató, majd kell egy sima mutató is és a napszakoknak megfelelő háttérkép! Ha ezek mind megvannak akkor indulhat a menet! Sima view-re lesz szükségünk ( lenti kép )

Legyen a neve Analog és az iphone van kiválasztva.

Hozzá adjuk a QuartzCore freamworkot

A ViewControlle.h részhez társítjuk tehát#import <QuartzCore/QuartzCore.h> hozzá adásával mivel a mozgást ez fogja vezérelni!

Hozzá adjuk a fotókat ( óra ,mutató, háttér fotók )


Jöhet a forráskód amit a ViewController.m részbe írunk:

CALayer *sec_mutato;
CALayer *min_mutato;
CALayer *hour_mutato;
CALayer *hatterkep;
CALayer *hatterkepLayer;
NSTimer *timer;

NSDate *most;
NSDateFormatter *formatter;
int most_h;
int most_m;
int most_s;
int pre_h =25;

– (void) onTimer:(CFRunLoopTimerRef *)timer {
[self setTime];
[self setClock];
[self setBackLayer];
}

– (void)setTime {
most =[NSDate date];
formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@”kk”];
most_h = [[formatter stringFromDate:most] intValue];
[formatter setDateFormat:@”mm”];
most_m = [[formatter stringFromDate:most] intValue];
[formatter setDateFormat:@”ss”];
most_s = [[formatter stringFromDate:most] intValue];
}

– (void)setClock {
//mutató mozgás
CATransform3D transform_s = CATransform3DIdentity;
transform_s = CATransform3DRotate(transform_s, (360 * most_s / 60) * M_PI / 180.0, 0, 0, 1);
sec_mutato.transform = transform_s;

//mutató mozgás
CATransform3D transform_m = CATransform3DIdentity;
transform_m = CATransform3DRotate(transform_m, (360 * most_m / 60 + ((360 / 60) * most_s /60)) * M_PI / 180.0, 0, 0, 1);
min_mutato.transform = transform_m;

//mutató mozgás
CATransform3D transform_h = CATransform3DIdentity;
transform_h = CATransform3DRotate(transform_h, (360 * most_h / 12 + ((360 / 12) * most_m / 60)) *M_PI / 180.0, 0, 0, 1);
hour_mutato.transform = transform_h;

}

– (void)setBackLayer {
//háttér napszak váltás időre. Bővithető tetszés szerint órára lebontva !

if (pre_h != most_h) {
if (6 <= most_h && most_h <10 ) {
hatterkep.contents =(id)[UIImage imageNamed:@”reggel.png”].CGImage;
} else if (10 <= most_h && most_h < 17 ) {
hatterkep.contents =(id)[UIImage imageNamed:@”nappal.png”].CGImage;
} else if (17 <= most_h && most_h < 24 ) {
hatterkep.contents =(id)[UIImage imageNamed:@”este.png”].CGImage;
} else if (0 <= most_h && most_h < 6) {
hatterkep.contents =(id)[UIImage imageNamed:@”ejszaka.png”].CGImage;
}
pre_h =most_h;
}
}

– (void)viewWillAppear:(BOOL)animated{

hatterkepLayer =[self.view layer];

//háttér
hatterkep =[CALayer layer];
hatterkep.bounds =CGRectMake(0, 0, 320, 480);
hatterkep.position =CGPointMake(160, 240);
[self setBackLayer];
hatterkep.zPosition =10;
[hatterkepLayer addSublayer:hatterkep];

[self setTime];

//óra háttér
CALayer *layer_hatter =[CALayer layer];
layer_hatter.bounds =CGRectMake(0, 0, 203, 203);//kép mérete
layer_hatter.position =CGPointMake(160, 200);//kép közép pozició
layer_hatter.contents =(id)[UIImage imageNamed:@”Clock.png”].CGImage;
layer_hatter.zPosition =20;
[hatterkepLayer addSublayer:layer_hatter];

//óra kis mutató
min_mutato =[CALayer layer];
min_mutato.bounds =CGRectMake(0, 0, 16, 100); //mutató vastagsága 16, hossza 100
min_mutato.anchorPoint =CGPointMake(0.5, 0.93);
min_mutato.position =CGPointMake(160, 200); //mutató kezdő pontjának koordinátája +
min_mutato.contents =(id)[UIImage imageNamed:@”mutato.png”].CGImage;
min_mutato.zPosition =30;
[hatterkepLayer addSublayer:min_mutato];

//óra nagy mutató
hour_mutato =[CALayer layer];
hour_mutato.bounds =CGRectMake(0, 0, 16, 80);
hour_mutato.anchorPoint =CGPointMake(0.5, 0.92);
hour_mutato.position =CGPointMake(160, 200);
hour_mutato.contents =(id)[UIImage imageNamed:@”mutato.png”].CGImage;
hour_mutato.zPosition =40;
[hatterkepLayer addSublayer:hour_mutato];

//óra másodperc mutató
sec_mutato =[CALayer layer];
sec_mutato.bounds =CGRectMake(0, 0, 7, 110);
sec_mutato.anchorPoint =CGPointMake(0.5, 0.93);
sec_mutato.position =CGPointMake(160, 200);
sec_mutato.contents =(id)[UIImage imageNamed:@”mutato.png”].CGImage;
sec_mutato.zPosition =50;
[hatterkepLayer addSublayer:sec_mutato];

[self setClock];
[self startClock];
}

– (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

– (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}

– (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

– (void) startClock {
timer = [NSTimer
scheduledTimerWithTimeInterval:0.1
target: self
selector:@selector(onTimer:)
userInfo:nil
repeats:YES];
}

– (void) stopClock {
[timer invalidate];
}

@end
Mindenhez megpróbáltam oda írni mi miért van ! Értelemszerűen a képek elhelyezését tetszés szerint átírhatod de akkor minden egységnél mert szétcsúszik az egész kép ! A háttér kép váltás rajtad múlik, hogy mennyire akarod, hogy részletesen legyen lebontva napszakokra és óra intervallumokra !!
Ha mindent jól csináltál akkor ez lesz a végeredmény !

Reklámok

Hozzászólás

Kategória: Források

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés /  Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés /  Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés /  Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés /  Módosítás )

Kapcsolódás: %s