В этих примерах касания и рисование происходят в главном виде контроллера вида:
UIGraphicsBeginImageContext(self.view.frame.size);
[drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
и т.д ...
Таким образом, если вы измените рамку этого вида на меньший размер, чертеж должен автоматически ограничиться меньшим размером.
Или вы можете «переместить» распознавание касания и рисунок в другое меньшее подпредставление:
- Создать новое меньшее подпредставление.
- Добавьте его на главный экран.
- Добавить UITapGestureRecognizer в маленькое представление
- Обработайте касания в действии UITapGestureRecognizer и выполните рисование в подпредставлении.
===== РЕДАКТИРОВАТЬ =====
Вот как это сделать:
- (void)viewDidLoad{
[super viewDidLoad];
self.view.backgroundColor = [UIColor grayColor];
canvas = [[UIView alloc] initWithFrame:CGRectMake(200.0, 200.0, 300.0, 300.0)];
canvas.backgroundColor = [UIColor whiteColor];
[self.view addSubview:canvas];
UIImageView *iv = [[UIImageView alloc] initWithImage:nil];
iv.frame = canvas.frame;
[self.view addSubview:iv];
self.drawImage = iv;
[iv release];
UIPanGestureRecognizer *panRec = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(userPanned:)];
[canvas addGestureRecognizer:panRec];
[panRec release];
}
- (void)userPanned:(UIPanGestureRecognizer *)recognizer {
CGPoint touchPoint = [recognizer locationInView:canvas];
if (recognizer.state == UIGestureRecognizerStateBegan) lastTouchPoint = touchPoint;
if (CGRectContainsPoint(CGRectMake(0.0, 0.0, canvas.frame.size.width, canvas.frame.size.height), touchPoint)) {
UIGraphicsBeginImageContext(canvas.frame.size);
[drawImage.image drawInRect:CGRectMake(0.0, 0.0, canvas.frame.size.width, canvas.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastTouchPoint.x, lastTouchPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), touchPoint.x, touchPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
lastTouchPoint = touchPoint;
}
}
canvas, lastTouchPoint и drawImage - это iVars.
Я не реализовал процедуры doubleTap и Tap, чтобы очистить изображение и нарисовать точку, но этого должно быть достаточно, чтобы начать работу.