У меня есть UIViewController
. Внутри него UITableView
, который отображается в исходной точке 0 , 0
. У меня также есть UIScrollView
, который отображается на 0, -80
, так что он не отображается на экране и не отображается.
При нажатии кнопки меню , Я анимирую UIView Контроллер
опускает рамку на 80 пикселей, чтобы открыть UIScrollView
.
Проблема в том, что UIScrollView
вообще не отвечает.
Если я нарисую UIScrollView
, скажем, 0,0
, где он виден при загрузке, он будет работать нормально. Я даже могу анимировать его за пределами экрана, а затем снова на экране без проблем.
Вот как выглядит мое представление до анимации:
_____________________________
| | Frame -> (0,-80, 320, 80)
| ScrollView | **Offscreen**
|_____________________________|
| | <- Original view (0,0,320,480)
| |
| |
| |
| |
| |
| Original View |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|_____________________________|
Когда я анимирую, я делаю следующее:
[UIView animateWithDuration:0.3
delay:0.0
options:(UIViewAnimationOptionAllowUserInteraction |
UIViewAnimationOptionCurveEaseIn)
animations:^{
self.view.frame = CGRectMake(0.0, (self.view.frame.origin.y + container.frame.size.height), self.view.frame.size.width, self.view.frame.size.height);
scroll.userInteractionEnabled = YES;
}
completion:^(BOOL finished) {
if (scrollLoaded == NO) {
[self loadFavorites];
scrollLoaded = YES;
}
}];
Теперь мое представление выглядит так после анимации:
_____________________________
| | Frame -> (0, -80, 320, 80)
| ScrollView |
|_____________________________|
| | <- Original view (0, 80, 320, 480)
| |
| |
| |
| |
| |
| Original View |
| |
| |
| |
| |
| |
| |
| |
|_____________________________|
| |
| **Offscreen** |
|_____________________________|
Я разделил свой scrollView
на подклассы, чтобы более внимательно прислушиваться к событиям:
.h
#import <UIKit/UIKit.h>
@interface UIScrollView_ExtraTouch : UIScrollView
@end
.m
#import "UIScrollView+ExtraTouch.h"
@implementation UIScrollView_ExtraTouch
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"scrollview touchesBegan");
[self.nextResponder touchesBegan:touches withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"scrollview touchesMoved");
if(!self.dragging){
[self.nextResponder touchesMoved:touches withEvent:event];
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"scrollview touchesEnded");
[self.nextResponder touchesEnded:touches withEvent:event];
}
@end
Ничего не записывается в журнал после анимации. Что, как я думаю , означает, что, поскольку кадр находится на -80
, он считает, что он находится вне экрана, поэтому не получает никаких действий.
Это правильно? Если да, то есть ли способ исправить это?