Играть с UIImageView?

#iphone #objective-c #ios4

#iPhone #objective-c #ios4

Вопрос:

у меня есть 3 * 3 фрагмента изображений из одного изображения (путем обрезки), но как управлять перемещением этих изображений, для этого я должен объявлять разные объекты для всех из них или любым другим способом их… можно управлять таким количеством изображений с помощью массива…. Пожалуйста, помоги, приятель

Мы можем сделать это с помощью массива объектов …?

 - (void)viewDidLoad {

UIImage *img = [UIImage imageNamed:@"3.jpg"];

for(int i = 0;i < 3;i  )
{
    for (int j = 0; j < 3 ; j  )

    [self SetImagePeces:i :j];

}
    [super viewDidLoad];
}


-(void) SetImagePeces:(int)col:(int)row
{

UIImage *img = [UIImage imageNamed:@"3.jpg"];

img1 = [[UIImageView alloc] init];
img1.frame = CGRectMake(0   235 * col, 0   235 * row, 233, 233);
img1.tag = row;

img1.userInteractionEnabled = YES;

CGRect clippedRect = CGRectMake(0   233 * col,700 - 233 * row, 233, 233);

UIImage *imgV = [self imageByCropping:img toRect:clippedRect];

img1.image = imgV;

[self.view addSubview:img1];
[img1 release];


}
  

Обновить ::

Тем не менее, сейчас я экспериментирую с изображением размером 700 * 700, но как привязать изображение любого размера к нашему размеру..

** Событие касания :: **

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

UITouch *touch = [touches anyObject];
   if (touch.view == img2) {

           if (c2 == 0) {
                   tempImg = img2.image;
                   [flag replaceObjectAtIndex:1 withObject:@"1"];
                   c2  ;
           }
           else {
                   for(int j=0;j<9;j  )
                   {
                           if(j==1)
                                   {[flag replaceObjectAtIndex:j withObject:@"0"];}
                           else
                           {
                                   int a=[[flag objectAtIndex:j]integerValue];
                           if (a==1) {
                                   img3.image=img2.image;
                                   [flag replaceObjectAtIndex:j withObject:@"0"];
                           }
                           }
                   }
                   img2.image = tempImg;
                   c2 = 0;
           }
   }
   if (touch.view == img3) {

           if (c2 == 0) {
                   tempImg = img3.image;
                   [flag replaceObjectAtIndex:2 withObject:@"1"];
                   c2  ;
           }
           else {
                   for(int j=0;j<9;j  )
                   {
                           if(j==2)
                           {[flag replaceObjectAtIndex:j withObject:@"0"];}
                           else
                           {
                           int a=[[flag objectAtIndex:j]integerValue];
                           if (a==1) {
                                   img2.image=img3.image;
                                   [flag replaceObjectAtIndex:j withObject:@"0"];
                           }
                           }
                   }
                   img3.image = tempImg;
                   c2 = 0;
           }
   }


}
  

Здесь я меняю изображение на сенсорный метод, поэтому использую только для 2 изображений, но слишком сложно настроить для большего количества изображений

Заранее спасибо

Ответ №1:

Я буду использовать NSMutableDictionary для управления этими объектами. Вы можете определить ключ словаря следующим образом. Затем вы можете получить доступ к нужному изображению с номерами строк и столбцов.

 - (NSString *)keyForRow:(int)row col:(int)col {
   return [NSString stringWithFormat:@"%d_%d", row, col];
}
  

Обновить

NSMutableDictionary *myImageDict = …; ///< параметр для управления UIImageView.

 - (void)setImageView:(UIImageView *)image row:(int)row col:(int)col
   {
       [myImageDict setObject:image forKey:[self keyForRow:row col:col]];
   }

- (UIImageView *)imageWithRow:(int)row col:(int)col
{
    return [myImageDict objectForKey:[self keyForRow:row col:col]];
}
  

Затем вы можете управлять UIImageView с помощью номера строки и столбца с помощью NSMutableDictionary.

Что касается того, как переместить эти UIImageView, вы можете использовать UIGestureRecognizer для отслеживания события касания в UIImageView. Обрабатывая эти события касания, особенно touchedMoved:withEvent: , и изменяя центр UIImageView, вы можете перемещать эти UIImagesView по желанию.

Комментарии:

1. я добавляю свой код выше, пожалуйста… дайте мне совет… я должен случайным образом установить изображение, чем на ощупь изменить его…

2. спасибо, приятель, я пробую это, до сих пор я использую отдельный объект UIImageView и использую событие касания. позвольте s see may be it мне быть полезным…

Ответ №2:

вам нужно взять несколько объектов uiimageview и с помощью touchmove переместить центр затронутого imageview.

Комментарии:

1. да, приятель, я делаю точно так же, но здесь я касаюсь только 3 * 3 (9 объектов ImageView obj), но когда размер матрицы увеличивается, в то время становится сложно управлять таким большим количеством объектов и управлять его памятью тоже … , я также добавляю свой код события касания, чтобы увидеть это..