2010-11-25 4 views
3

J'ai une image de grande taille. Pour enregistrer la mémoire, donc je ne veux pas charger l'image entière à un moment donné, si je divise l'image en 9 images comme un tableau 3x3iphone SDK: impossible de faire défiler la diagonale dans une matrice d'images?

036 
147 
258 

je peux faire défiler les morceaux d'image plus petite d'une image à un image adjacente, comme de (1,1) à (1,2) (1,3), ou de (1,1) à (2,1) (3,1), mais je ne peux pas le faire défiler (1,1) à (2,2) ou (3,3).

Il semble que je ne peux que faire défiler la photo de gauche à droite ou de haut en bas, mais pas en diagonale.

Si je défiler en diagonale, puis image semble foiré, comme ceci:

360 
471 
582 

Comment puis-je faire défiler en diagonale, et/ou sauter des sections pendant le défilement?

Voici mon code:

.h

CGPoint first; 
IBOutlet UIScrollView *scr; 
NSMutableArray *ary; 
int x_total; 
int y_total; 
BOOL move; 
BOOL inside; 
IBOutlet UIView *mapview; 
int x_begin; 
int y_begin; 
int x_times; 
int y_times; 

images Cut

move = NO; 
    inside = NO; 
    x_times = 0; 
    y_total = 0; 
    ary = [NSMutableArray new]; 



    for (int i = 0; i < 3; i++) { 
     for (int j = 0; j < 3; j++) { 
      UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_%d_%d.jpg", i ,j]]]; 
      [img setFrame:CGRectMake((i-1) *64, (j-1)*64, 64, 64)]; 
      [mapview addSubview:img]; 
      [ary addObject:img]; 

     } 
    } 
    x_begin = 64*2; 
    y_begin = 64*2; 
    x_total = 0; 
    y_total = 0; 

et la méthode de contrôle tactile doigt et déplacer

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    NSLog(@"touchesBegan"); 
    //Set Animation 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 

    //Trigger start 
    //UITouch *touch = [touches anyObject]; 
    NSSet *teaches = [event allTouches]; 

    for (UITouch *myTouch in teaches){ 
     //first = [myTouch previousLocationInView:self.view]; 
     CGPoint currentTouchPosition = [myTouch previousLocationInView:mapview]; 
     //first = [myTouch previousLocationInView:mapview]; 
     NSLog(@"currentTouchPosition x is %f",currentTouchPosition.x); 
     NSLog(@"currentTouchPosition y is %f",currentTouchPosition.y); 
     NSLog(@"mapview.frame.origin.x is %d",mapview.frame.origin.x); 
     NSLog(@"mapview.frame.origin.y is %d",mapview.frame.origin.y); 

     if ((currentTouchPosition.x > 0 && currentTouchPosition.x < 64) && (currentTouchPosition.y > 0 && currentTouchPosition.y < 64)) { 
      first = currentTouchPosition; 
      inside = YES; 
     }else { 
      first.x = 0; 
      first.y = 0; 
      inside = NO; 
     }  

    } 
    [UIView commitAnimations]; 
} 

tactile Déplacé

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 

    //Touch Trigger 
    NSSet *teaches = [event allTouches]; 

    for (UITouch *myTouch in teaches){ 
     CGPoint currentTouchPosition = [myTouch previousLocationInView:mapview]; 
     NSLog(@"currentTouchPosition.x is %d ",currentTouchPosition.x); 

     if (inside) { 
      if ((currentTouchPosition.x > 0 && currentTouchPosition.x < 64) && (currentTouchPosition.y > 0 && currentTouchPosition.y < 64)) { 
       int x = first.x-currentTouchPosition.x; 
       int y = first.y-currentTouchPosition.y; 

       x_total += x; 
       y_total += y; 
       NSLog(@"x_total is %d",x_total); 
       NSLog(@"y_total is %d",y_total); 

       NSArray *arr = [mapview subviews]; 
       NSEnumerator *enumerator = [arr objectEnumerator]; 
       id anObject; 
       UIImageView *tmpimg; 

       while (anObject = [enumerator nextObject]) { 
        if([anObject isMemberOfClass:[UIImageView class]]) { 
         tmpimg = (UIImageView *)anObject; 
         if (x < 0) { 
          [tmpimg setFrame:CGRectMake(tmpimg.frame.origin.x-x, tmpimg.frame.origin.y, tmpimg.frame.size.width, tmpimg.frame.size.height)]; 
         }else { 
          [tmpimg setFrame:CGRectMake(tmpimg.frame.origin.x-x, tmpimg.frame.origin.y, tmpimg.frame.size.width, tmpimg.frame.size.height)]; 
         } 
         if (y < 0) { 
          [tmpimg setFrame:CGRectMake(tmpimg.frame.origin.x, tmpimg.frame.origin.y-y, tmpimg.frame.size.width, tmpimg.frame.size.height)]; 
         }else { 
          [tmpimg setFrame:CGRectMake(tmpimg.frame.origin.x, tmpimg.frame.origin.y-y, tmpimg.frame.size.width, tmpimg.frame.size.height)]; 
         } 

        } 
       } 
       if (y_times == 0) { 
        if (y_total >= 64/2) { 
         y_times ++; 
         for (int i = 0; i < 3; i++) { 
          int g; 
          if (i == 0) { 
           g = 0; 
          }else if (i == 1) { 
           g = 3; 
          }else if (i == 2) { 
           g = 6; 
          } 
          UIImageView *tmpimg; 
          tmpimg = [ary objectAtIndex:g]; 
          [[ary objectAtIndex:g] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_%d_3.jpg" ,i]]]; 
          [[ary objectAtIndex:g] setFrame:CGRectMake(tmpimg.frame.origin.x, tmpimg.frame.origin.y+(64+64*2), 64, 64)]; 
          tmpimg = nil; 
         } 
         y_total= 0; 
        } 
        if (x_times == 0) { 
         if (x_total >= 64/2) { 
          x_times ++; 

          for (int i = 0; i < 3; i++) { 
           UIImageView *tmpimg; 
           tmpimg = [ary objectAtIndex:i]; 
           [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_3_%d.jpg" ,i]]]; 
           [[ary objectAtIndex:i] setFrame:CGRectMake(tmpimg.frame.origin.x+(64+64*2), tmpimg.frame.origin.y, 64, 64)]; 
           tmpimg = nil; 
          } 
          x_total= 0; 
         } 

        }else if (x_times == 1) { 
         if (x_total >= 64) { 
          x_times ++; 

          for (int i = 3; i < 6; i++) { 
           UIImageView *tmpimg; 
           tmpimg = [ary objectAtIndex:i]; 
           [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_4_%d.jpg" ,i-3]]]; 
           [[ary objectAtIndex:i] setFrame:CGRectMake(tmpimg.frame.origin.x+(64+64*2), tmpimg.frame.origin.y, 64, 64)]; 
           tmpimg = nil; 
          } 
          x_total= 0; 


         }else if (x_total <= -64/2) { 
          x_times --; 

           for (int i = 0; i < 3; i++) { 
            UIImageView *tmpimg; 
            tmpimg = [ary objectAtIndex:i]; 
            [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_0_%d.jpg" ,i]]]; 
            [[ary objectAtIndex:i] setFrame:CGRectMake(tmpimg.frame.origin.x-(64+64*2), tmpimg.frame.origin.y, 64, 64)]; 
            tmpimg = nil; 
           } 
           x_total= 0; 


         } 
        }else if (x_times == 2) { 
         if (x_total >= 64) { 
          x_times ++; 
          for (int i = 6; i < 9; i++) { 
           UIImageView *tmpimg; 
           tmpimg = [ary objectAtIndex:i]; 
           [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_5_%d.jpg" ,i-6]]]; 
           [[ary objectAtIndex:i] setFrame:CGRectMake(tmpimg.frame.origin.x+(64+64*2), tmpimg.frame.origin.y, 64, 64)]; 
           tmpimg = nil; 
          } 
          x_total= 0; 
         }else if (x_total <= -64/2) { 
          x_times --; 
          for (int i = 3; i < 6; i++) { 
           UIImageView *tmpimg; 
           tmpimg = [ary objectAtIndex:i]; 
           [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_1_%d.jpg" ,i-3]]]; 
           [[ary objectAtIndex:i] setFrame:CGRectMake(tmpimg.frame.origin.x-(64+64*2), tmpimg.frame.origin.y, 64, 64)]; 
           tmpimg = nil; 
          } 
          x_total= 0; 
         } 
        }else if (x_times == 3) { 
         if (x_total <= -64/2) { 
          x_times --; 
          for (int i = 6; i < 9; i++) { 
           UIImageView *tmpimg; 
           tmpimg = [ary objectAtIndex:i]; 
           [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_2_%d.jpg" ,i-6]]]; 
           [[ary objectAtIndex:i] setFrame:CGRectMake(tmpimg.frame.origin.x-(64+64*2), tmpimg.frame.origin.y, 64, 64)]; 
           tmpimg = nil; 
          } 
          x_total= 0; 
         } 
        } 
       } 
       if (y_times == 1) { 
        if (y_total <= -64/2) { 
         y_times --; 
         for (int i = 0; i < 3; i++) { 
          int g; 
          if (i == 0) { 
           g = 0; 
          }else if (i == 1) { 
           g = 3; 
          }else if (i == 2) { 
           g = 6; 
          } 
          UIImageView *tmpimg; 
          tmpimg = [ary objectAtIndex:g]; 
          [[ary objectAtIndex:g] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_%d_0.jpg" ,i]]]; 
          [[ary objectAtIndex:g] setFrame:CGRectMake(tmpimg.frame.origin.x, tmpimg.frame.origin.y-(64+64*2), 64, 64)]; 
          tmpimg = nil; 
         } 
         y_total= 0; 
        } 
        if (x_times == 0) { 
         if (x_total >= 64/2) { 
          x_times ++; 

          for (int i = 0; i < 3; i++) { 
           UIImageView *tmpimg; 
           tmpimg = [ary objectAtIndex:i]; 
           if (i == 0) { 
            [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_3_%d.jpg" ,i+3]]]; 
           }else { 
            [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_3_%d.jpg" ,i]]]; 
           } 
           [[ary objectAtIndex:i] setFrame:CGRectMake(tmpimg.frame.origin.x+(64+64*2), tmpimg.frame.origin.y, 64, 64)]; 
           tmpimg = nil; 
          } 
          x_total= 0; 
         } 

        }else if (x_times == 1) { 
         if (x_total >= 64) { 
          x_times ++; 

          for (int i = 3; i < 6; i++) { 
           UIImageView *tmpimg; 
           tmpimg = [ary objectAtIndex:i]; 
           if (i == 3) { 
            [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_4_%d.jpg" ,i]]]; 
           }else { 
            [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_4_%d.jpg" ,i-3]]]; 
           } 
           [[ary objectAtIndex:i] setFrame:CGRectMake(tmpimg.frame.origin.x+(64+64*2), tmpimg.frame.origin.y, 64, 64)]; 
           tmpimg = nil; 
          } 
          x_total= 0; 


         }else if (x_total <= -64/2) { 
          x_times --; 

          for (int i = 0; i < 3; i++) { 
           UIImageView *tmpimg; 
           tmpimg = [ary objectAtIndex:i]; 
           if (i == 0) { 
            [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_0_%d.jpg" ,i+3]]]; 
           }else { 
            [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_0_%d.jpg" ,i]]]; 
           } 
           [[ary objectAtIndex:i] setFrame:CGRectMake(tmpimg.frame.origin.x-(64+64*2), tmpimg.frame.origin.y, 64, 64)]; 
           tmpimg = nil; 
          } 
          x_total= 0; 

         } 
        }else if (x_times == 2) { 
         if (x_total >= 64) { 
          x_times ++; 
          for (int i = 6; i < 9; i++) { 
           UIImageView *tmpimg; 
           tmpimg = [ary objectAtIndex:i]; 
           if (i == 3) { 
            [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_5_%d.jpg" ,i-3]]]; 
           }else { 
            [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_5_%d.jpg" ,i-6]]]; 
           } 
           [[ary objectAtIndex:i] setFrame:CGRectMake(tmpimg.frame.origin.x+(64+64*2), tmpimg.frame.origin.y, 64, 64)]; 
           tmpimg = nil; 
          } 
          x_total= 0; 
         }else if (x_total <= -64/2) { 
          x_times --; 
          for (int i = 3; i < 6; i++) { 
           UIImageView *tmpimg; 
           tmpimg = [ary objectAtIndex:i]; 
           if (i == 3) { 
            [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_1_%d.jpg" ,i]]]; 
           }else { 
            [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_1_%d.jpg" ,i-3]]]; 
           } 
           [[ary objectAtIndex:i] setFrame:CGRectMake(tmpimg.frame.origin.x-(64+64*2), tmpimg.frame.origin.y, 64, 64)]; 
           tmpimg = nil; 
          } 
          x_total= 0; 
         } 
        }else if (x_times == 3) { 
         if (x_total <= -64/2) { 
          x_times --; 
          for (int i = 6; i < 9; i++) { 
           UIImageView *tmpimg; 
           tmpimg = [ary objectAtIndex:i]; 
           if (i == 3) { 
            [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_2_%d.jpg" ,i-3]]]; 
           }else { 
            [[ary objectAtIndex:i] setImage:[UIImage imageNamed:[NSString stringWithFormat:@"map14_2_%d.jpg" ,i-6]]]; 
           } 
           [[ary objectAtIndex:i] setFrame:CGRectMake(tmpimg.frame.origin.x-(64+64*2), tmpimg.frame.origin.y, 64, 64)]; 
           tmpimg = nil; 
          } 
          x_total= 0; 
         } 
        } 
       } 
       first.x = currentTouchPosition.x; 
       first.y = currentTouchPosition.y; 
       arr=nil; 

      }else { 
       first.x = 0; 
       first.y = 0; 
       inside = NO; 
      } 


     }else { 
      if ((currentTouchPosition.x > 0 && currentTouchPosition.x < 64) && (currentTouchPosition.y > 0 && currentTouchPosition.y < 64)) { 
       first = currentTouchPosition; 
       inside = YES; 
      }else { 
       first.x = 0; 
       first.y = 0; 
       inside = NO; 
      } 
     } 


    } 
} 
+0

un peu trop longtemps à propos du doigt déplacé .... –

+0

Quelle est la taille de l'image originale? Aussi, utilisez-vous un UIScrollView? – makdad

+0

L'image originale est 1280 * 1024, n'utilisant pas UIScrollView –

Répondre

1

Il sonne un peu comme vous essayez de réinventer la roue.

Avez-vous regardé UIScrollView?

En particulier, il y a un exemple de code (ImageSuite, je crois) qui montre spécifiquement comment découper une plus grande image en carreaux, puis les positionner uniquement dans une vue défilante qui permet de défiler dans n'importe quelle direction.

Cela ressemble beaucoup au fonctionnement de MKMapView (Maps.app), par exemple.

+0

Je ne suis pas sûr, je vais dire à mon ami ~ Merci mon pote! –

Questions connexes