2013-05-20 5 views
1

Im пытается сделать функцию отмены для моего приложения для рисования в iOS. Мой подход заключается в том, что после каждого чертежа (линии, прямые линии, квадраты, круги) чертеж будет добавлен в массив, чтобы я мог поп-удалять/исключить lastObjectIndex массива при отмене, а затем перерисовать содержимое массива до изображение. Я использую NSMutableArray и UIImage и использую UIGraphicsGetImageFromCurrentImageContext. Мой вопрос: как я могу отобразить все массивы изображений в один UIImageView?Добавить изображения из массива в ImageView

Вот мой код:

imgArray = [[NSMutableArray alloc] init]; 

UIImage *tempImg = [[UIImage alloc] init]; 
tempImg = UIGraphicsGetImageFromCurrentImageContext(); 
[imgArray addObject:tempImg]; 

UIGraphicsEndImageContext(); 

UIGraphicsBeginImageContext(mainImage.frame.size); 
[mainImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) blendMode:kCGBlendModeNormal alpha:1.0]; 
[tempImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) blendMode:kCGBlendModeNormal alpha:opacity]; 
mainImage.image = tempImg; //UIGraphicsGetImageFromCurrentImageContext(); 
tempImage.image = nil; 
UIGraphicsEndImageContext(); 
+1

Что вы подразумеваете под "отображать все"? вы назовете [yourUIImageView setImage: [imgArray objectAtIndex: index]]? – boreas

+0

Почему вы не используете несколько экземпляров UIImaveView (по одному для каждого UIImage)? Этот способ должен быть простым в реализации, и вы можете иметь больше взаимодействия для каждого объекта, например, изменить размер или фрейм. Но если вы хотите нарисовать все изображения только в одном UIImageView, вы можете, например, использовать многослойный слой и нарисовать одно изображение в каждом слое или реализовать алгоритм для рисования изображений в методе рисования. – Zasuk

+0

@boreas: Да, я пробовал это, но показан только последний рисунок, и последние рисунки на UIImageView очищаются. –

ответ

0

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

Если это так, то ваши сохраненные изображения будут представлять этот стек. Вы можете сохранить временное изображение, представляющее n-1 из стека, а затем текущее изображение, чтобы сделать рендеринг быстрее. Фактически, то, что я хотел бы сделать, это иметь временное изображение в представлении и текущий активный объект в другом представлении, превосходящий временную.

Когда у вас есть отмена, вы можете сначала просто удалить текущий активный объект. Второе отключение затем заставит вас повторно отобразить временную пиктограмму, начиная с изображения 0 и рисуя каждый слой поверх базового изображения. Что делает эту работу, так это то, что каждый слой прозрачен, за исключением рисованных битов.

Чтобы создать временное изображение, я бы использовал контекст растрового изображения и применял слои в коде, не зная, будут ли методы Quartz делать это для вас или нет (они могут хорошо).

Смежные вопросы