CABasicAnimation
  [ Ignoră ]
Avatar
RankRankRank
Member
Din: Ploiesti
Macuser din: 06.12.11

Utilizind CABasicAnimation , incerc sa mut o poza in centrul ecranului utilizind codul de mai jos

-(IBAction)btPoza:(UIButton *)sender {

    [self
.view bringSubviewToFront:((UIImageView *)[sender.superview viewWithTag:[sender tag]-5])];
     
CABasicAnimation *pozaAnimationToCenter [CABasicAnimation animationWithKeyPath:@"position"];
     
pozaAnimationToCenter.duration=1;
     
pozaAnimationToCenter.repeatCount=1;
     
pozaAnimationToCenter.autoreverses=YES;
     
pozaAnimationToCenter.fromValue=[NSValue valueWithCGPoint:((UIImageView *)[sender.superview viewWithTag:[sender tag]-5]).center];
     
pozaAnimationToCenter.toValue=[NSValue valueWithCGPointself.tableView.window.center ];    
     
[((UIImageView *)[sender.superview viewWithTag:[sender tag]-5]).layer addAnimation:theAnimation forKey:@"animateLayer";      

Respectiva poza se afla intr-un cell .
In cazul in care apesi poza aflata in primul row afisat ( cel mai de sus indiferent de indexpath ) , ajunge la centrul ecranului indiferent de pozitia in care se afla in acel cell .
Atunci cind fac acelasi lucru cu o poza aflata in rindurile urmatoare , poza nu mai ajunge in centrul ecranului ci mai jos ( pe orizontal este tot in centru ) .
Distanta dintre centrul ecranului si locul in care ajunge poza este egala cu row Height multiplicat cu pozitia rindului in ecran ( al doilea , al treilea , etc ) .

Intrebare este : cum determin punctul care reprezinta centrul ecranului ? ( am incercat cu self.tableView.window.center , self.view.center , self.view.window.center rezultatul fiind acelasi)

Totul se intimpla intr-un UITableViewController .

 Semnătură 


MacBook Pro 15”  i7 2.2GHz/ 16GB/ 500GB SSD ,  10.11
MacBook Air 13”  i5 1.3GHz/ 4GB/ 256GB SSD ,  10.11

Profil
 
  [ Ignoră ]   [ # 1 ]
Avatar
RankRankRankRank
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06

[[UIScreen mainScreen] bounds]
sau [[[UIApplication sharedApplication] delegate] window] bounds]

 Semnătură 

A man should look for what is, and not for what he thinks should be.—Albert Einstein

Profil
 
  [ Ignoră ]   [ # 2 ]
Avatar
RankRankRankRank
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06

Pentru delegate trebuie sa faci typecast mai intai pentru (AppDelegate *) atribuite unei variabile apoi accesezi window si bounds.

 Semnătură 

A man should look for what is, and not for what he thinks should be.—Albert Einstein

Profil
 
  [ Ignoră ]   [ # 3 ]
Avatar
RankRankRank
Member
Din: Ploiesti
Macuser din: 06.12.11

Am incercat si face la fel .
am crezut ca nu am inteles bine ce face CABasicAnimation asa ca am incercat si urmataorea metoda

- (void)setLocationForView:(UIView *)view
{
    CGFloat x 
= (int)[[UIScreen mainScreen] bounds].size.width/2;    
    
CGFloat y = (int)[[UIScreen mainScreen] bounds].size.height/2;    
    
view.center CGPointMake(xy);
}
-(IBAction)btPoza:(UIButton *)sender {
    
    CGPoint startLocation 
= ((UIImageView *)[sender.superview viewWithTag:[sender tag]-5]).center;
    
        if (
CGRectContainsPoint(((UIImageView *)[sender.superview viewWithTag:[sender tag]-5]).framestartLocation)) {
            [UIView animateWithDuration
:2.0 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
                [self setLocationForView
:((UIImageView *)[sender.superview viewWithTag:[sender tag]-5])];
                ((
UIImageView *)[sender.superview viewWithTag:[sender tag]-5]).transform CGAffineTransformScale(CGAffineTransformIdentity0.990.99);
            
} completion:^(BOOL finished{
                
((UIImageView *)[sender.superview viewWithTag:[sender tag]-5]).transform CGAffineTransformIdentity;
            
}];
        
}

Am obtinut acelasi rezultat.

Intr-un UIViewController nu am aceasta problema . Numai in UITableViewController .
Este ca si cum coltul stinga sus al Screen-ului este coltul din stinga sus al celulei in care se afla imaginea pe care vreau sa o mut , indiferent de pozitia celulei in screen.

Mai sap .

 Semnătură 


MacBook Pro 15”  i7 2.2GHz/ 16GB/ 500GB SSD ,  10.11
MacBook Air 13”  i5 1.3GHz/ 4GB/ 256GB SSD ,  10.11

Profil
 
  [ Ignoră ]   [ # 4 ]
Avatar
RankRankRank
Member
Din: Ploiesti
Macuser din: 06.12.11

Am gasit explicatia .
origin.x si origin.y ale imaginii pe care doresc sa o mut se refera la distanta pina la left si top cell ( acolo unde este definit obiectul ) . Atunci cind schimb x si y pentru imagine , aceasta isi va modifica pozitia tot fata de cell-ul in care se gaseste obiectul . Deci , trebuie sa scad din [UIScreen mainScreen] bounds].size.height distanta de la top scrren pina la top cell .

Urmatoarea intrebare care se pune este : cum aflu distanta de la top scrren pina la top cell ? ( poate fi oriunde pe ecran deoarece se poate face scroll in tableView )

Vreau ca in momentul in care apas pe o poza , aceasta sa se plimbe pina in centru apoi sa o maresc .

 Semnătură 


MacBook Pro 15”  i7 2.2GHz/ 16GB/ 500GB SSD ,  10.11
MacBook Air 13”  i5 1.3GHz/ 4GB/ 256GB SSD ,  10.11

Profil
 
  [ Ignoră ]   [ # 5 ]
Avatar
RankRankRankRank
Moderator
Din: Cluj-Napoca
Macuser din: 26.01.06

Pai celula ta are un frame, tabelul alt frame, si totul sta intr-un viewcontroller la 0x0 nu? Presupun ca vrei sa iei poza si o atasezi in viewcontroller inainte sa faci animatia, deci poza.y relativ la viewcontroller va fi: table.y + cell.y + poza.y

 Semnătură 

Mcintoshing…

Profil
 
  [ Ignoră ]   [ # 6 ]
Avatar
RankRankRank
Member
Din: Ploiesti
Macuser din: 06.12.11

Totul se intimpla intr-un UITableViewController .
Intr-un UIViewController nu sunt probleme.

Cam asa :
UITableViewController
    Table View
      Cell
        Poza

Intotdeauna y poza , cell , table view este 0 fata de parent .

 Semnătură 


MacBook Pro 15”  i7 2.2GHz/ 16GB/ 500GB SSD ,  10.11
MacBook Air 13”  i5 1.3GHz/ 4GB/ 256GB SSD ,  10.11

Profil
 
  [ Ignoră ]   [ # 7 ]
Avatar
RankRankRank
Member
Din: Ploiesti
Macuser din: 06.12.11

iata si solutia   [poza.superview convertPoint:poza.frame.origin toView:nil ].y

- (void)setLocationForView:(UIImageView *)poza
{
    CGFloat x 
= (int)[[UIScreen mainScreen] bounds].size.width/2;     
    
CGFloat y = (int)[[UIScreen mainScreen] bounds].size.height/2-[poza.superview convertPoint:poza.frame.origin toView:nil  ].y;    
    
poza.center CGPointMake(xy);

 Semnătură 


MacBook Pro 15”  i7 2.2GHz/ 16GB/ 500GB SSD ,  10.11
MacBook Air 13”  i5 1.3GHz/ 4GB/ 256GB SSD ,  10.11

Profil