#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), но когда размер матрицы увеличивается, в то время становится сложно управлять таким большим количеством объектов и управлять его памятью тоже … , я также добавляю свой код события касания, чтобы увидеть это..