我在这里搜索了很多,但似乎无法找到我的问题的答案......
我有一个名为SubView的类,这个类有一个简单的能力,它可以显示或消除动画
它是这样的:
-(void)showAnimated:(BOOL)animated {
self.active = YES;
//Make topmost
[self.parentView bringSubviewToFront:self];
if (animated) {
[UIView animateWithDuration:0.5
delay:0.0f
options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionBeginFromCurrentState
animations:^{
self.frame = self.originalFrame;
if (self.panningBlock) {
self.panningBlock(self.contentView.frame);
}
}
completion:^(BOOL finished){
}];
}
else {
self.frame = self.originalFrame;
if (self.panningBlock) {
self.panningBlock(self.contentView.frame);
}
}
其中self.originalFrame存储了View的位置的原始值,如果真的相似则隐藏部分
-(void)hideAnimated:(BOOL)animated {
self.active = NO;
//Store the frame
CGRect _frame = self.frame;
//Set the view starting point
switch (self.showingLocation) {
case SubViewShowingLocationRight:
_frame.origin = CGPointMake(_frame.size.width, _frame.origin.y);
break;
case SubViewShowingLocationBottom:
_frame.origin = CGPointMake(_frame.origin.x, _frame.size.height);
break;
case SubViewShowingLocationLeft:
_frame.origin = CGPointMake(-_frame.size.width, _frame.origin.y);
break;
default:
break;
}
if (animated) {
[UIView animateWithDuration:0.5
delay:0.0f
options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionBeginFromCurrentState
animations:^{
self.frame = _frame;
if (self.panningBlock) {
self.panningBlock(self.contentView.frame);
}
}
completion:^(BOOL finished){
}];
}
else {
self.frame = _frame;
if (self.panningBlock) {
self.panningBlock(self.frame);
}
}
[self.delegate didDismissSubView:self];
}
//// 因此动画发生在self.frame = _frame和self.frame = self.originalFrame
我也有self.panningBlock,这是一个父视图可以给出的块(它可以工作,所以它可以自己调整到子视图的帧变化..即子视图有一个选择器,它从底部出现,我需要调整表格视图,以免被选择器遮挡)
我所做的一个例子是
__weak MapViewController * weakSelf = self;
[weakSelf.placesView setPanningBlock:^(CGRect _frame){
if (weakSelf.placesView.isActive) {
CGRect mapFrame = weakSelf.mapView.frame;
mapFrame.origin.x = _frame.origin.x + _frame.size.width;
weakSelf.mapView.frame = mapFrame;
}
else {
CGRect mapFrame = weakSelf.mapView.frame;
mapFrame.origin.x = 0;
weakSelf.mapView.frame = mapFrame;
}
}];
如果子视图显示为像动画一样推送
,则父视图向右移动这是需要理解的所有代码(这是我的第一个问题,所以请原谅这里的任何漫步)
重点是动画不会同时出现, 会发生什么是进入的视图比父视图慢一点 他们不会粘在一起,我真的不知道该怎么做......
顺便说一句:他们确实在动画第一次出现时粘在了一起,但是之后就没有了......
有什么建议吗?
修改 我现在给出一些图片来解释会发生什么
答案 0 :(得分:1)
我把它当作答案实际上没有达到......
这里的问题是......视图的总大小......
MAPVIEW大小为100%,而tableview大小为80%......我正在将它们放在相同的动画上......所以它们的移动方式不同,因为它们必须覆盖1.0秒左右的整个动画动画。这个问题通过做一个明显的动画来修复......那里有一些图书馆......我用了一个破坏了我的项目...所以我最后抛弃了它...并且采取了更多......补丁解决方案...将背景颜色设置为掩盖运动......
此问题的解决方案是使用显式动画,并为每个帧...将两个视图移动到同一点......
我希望这个"解决方案"帮助社区..