Представление изображения, являющееся подпредставлением, рисует поверх представления держателя.Изображение является непрозрачным.Это означает, что при отрисовке видов не будет видимой части вида держателя, поэтому его вызов drawRect
оптимизирован.
Попробуйте упорядочить виды наоборот, чтобы держательview - это подпредставление imageview.Затем будет отображен вид изображения, а поверх него будет отображен вид держателя.
Кроме того, обратите внимание, что вы должны использовать границы родительского вида в качестве рамки подпредставления.
UIView* subview = [[UIView alloc] initWithFrame:[parentview bounds]];
Редактировать (добавить):
См. http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html%23//apple_ref/doc/uid/TP40009503-CH2-SW1, в частности, в разделе «Просмотр иерархий и управление подпредставлением»:
«Визуально содержимое подпредставления скрывает полностью или частичносодержимого его родительского представления "
Итак, попробуйте сделать родительский просмотр изображения, выполните инициализацию следующим образом:
// instance variables:
UIImageView* imageView;
MyHolderView* holderView;
imageView = [[UIImageView alloc] initWithFrame:mainRect];
holderView = [[MyHolderView alloc] initWithFrame:[imageView bounds]];
holderView.opaque = NO;
holderView.backgroundColor = [UIColor clearColor];
[imageView addSubview:holderView];
UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:holderView action:@selector(scale:)];
[pinchRecognizer setDelegate:self];
[holderView addGestureRecognizer:pinchRecognizer];
[pinchRecognizer release];
// etc...
Теперь представление изображения рисуется и представление держателя, его подпредставление нарисовано поверх него.Теперь, когда вы вызываете setNeedsDisplay для владельца, он получает вызов drawRect:
.
Например, отслеживайте жест следующим образом.Это может быть в вашем контроллере представления или в вашем подклассе представления MyHolderView;пример здесь будет в классе MyHolderView, так что переменные экземпляра location1
и location2
могут быть легко использованы совместно с методом drawRect:
.:
-(void)scale:(id)sender {
if (sender == pinchRecognizer) { // this allows the responder to work with multiple gestures if required
// get position of touches, for example:
NSUInteger num_touches = [pinchRecognizer numberOfTouches];
// save locations to some instance variables, like `CGPoint location1, location2;`
if (num_touches >= 1) {
location1 = [pinchRecognizer locationOfTouch:0 inView:holderView];
}
if (num_touches >= 2) {
location2 = [pinchRecognizer locationOfTouch:1 inView:holderView];
}
// tell the view to redraw.
[holderView setNeedsDisplay];
}
}
, а затем в подпрограмме drawRect представления держателя:
-(void)drawRect:(CGRect)rect {
// use instance variables location1 and location2 to draw the line.
}