滚动型缩放动画的问题 - 的Ipad(zooming animation problem in Sc

2019-10-30 05:01发布

在我的应用程序,我有一个分割画面中的细节视图是一个滚动视图。 我有5代表其是我的滚动视图的子视图,其中3个表视图是并排的顶部和2表视图是通过在底侧侧

我已经实现了当我点击了滚动任何任何表行的一种方式,这种观点会消失,另一种观点认为放大到它的位置。

我写在didSelectRowAtIndexPath方法下面的代码中间表子视图,

CGFloat xpos = self.view.frame.origin.x;
    CGFloat ypos = self.view.frame.origin.y;
    self.view.frame = CGRectMake(xpos+100,ypos+150,5,5);
    [UIView beginAnimations:@"Zoom" context:NULL];
    [UIView setAnimationDuration:2];
    self.view.frame = CGRectMake(xpos,ypos,220,310);
    [UIView commitAnimations];
    [self.view addSubview:popContents.view];

popContents是我需要放大到先前由该特定表视图所占用的视图的视图和正确执行。

然而,我所面临的问题是,由于有在身边另一个表子视图,如果我增加帧的大小说250左右,在考虑放大得到由tableview中隐藏在侧面的部分(其为如果考虑到放大的一部分的tableview下推移的一侧)。

反正是有使纠正这个我放大视图不会得到通过在其两侧tableviews隐藏?

我希望我已经解释正确我的问题...

更新:

下面是我使用添加子视图为滚动视图代码

// Scroll view
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 30, 1000, 740)];
scrollView.contentSize = CGSizeMake(1000, 700);
scrollView.delegate = self;
scrollView.scrollEnabled = YES;
scrollView.showsHorizontalScrollIndicator = YES;
scrollView.backgroundColor = [UIColor scrollViewTexturedBackgroundColor];
[self.view addSubview:scrollView];


aView = [[aViewController alloc] initWithNibName:@"aViewController" bundle:nil];
aView.view.frame = CGRectMake(10, 25, 220, 310);
[aView loadList:objPatients];
[scrollView addSubview:aView.view];

bView = [[bViewController alloc] initWithNibName:@"bViewController" bundle:nil];
bView.view.frame = CGRectMake(10, 350, 220, 310);
[bView loadList:objPatients];
[scrollView addSubview:bView.view];

cView = [[cViewController alloc] initWithNibName:@"cViewController" bundle:nil];
cView.view.frame = CGRectMake(240, 25, 220, 310);
[cView loadList:objPatients];
[scrollView addSubview:cView.view];

dView = [[dViewController alloc] initWithNibName:@"dViewController" bundle:nil];
enView.view.frame = CGRectMake(240, 350, 220, 310);
[enView loadList:objPatients];
[scrollView addSubview:dView.view];

eView = [[eViewController alloc] initWithNibName:@"eViewController" bundle:nil];
eView.view.frame = CGRectMake(470, 25, 220, 310);
[eView loadList:objPatients];
[scrollView addSubview:eView.view];

比方说,我在cViewController子视图添加代码didSelectRowAtIndexPath方法...

Answer 1:

这是一个猜测,因为我需要知道你的表视图是如何加入到滚动视图,但就在身边的人之前可能已添加了中间表视图。 视图是在他们与顶部的最后一个添加的顺序“堆叠”。 你需要得到滚动视图中间视图移动到前用这种方法

- (void)bringSubviewToFront:(UIView *)view

要做到这一点,最好的办法是创建该表意见的记录,并滚动查看委托。 该方法是这样的

- (void) moveAViewToFront: (MyTableView *) aTableView
{
    [self.view bringSubviewToFront: aTableView.view];
}

然后,您可以调用设置动画之前的委托方法。

编辑

多一点思考后,我意识到,子视图有其上海华盈的引用,这样的代码,此位应提供关于如何解决这个问题的想法。 我创建具有其将两个子视图的视图控制器的测试应用程序。 视图控制器头文件是MoveSubviewViewController.h

#import <UIKit/UIKit.h>

@interface MoveSubviewViewController : UIViewController
{
}

@end

和它的实现是

#import "MoveSubviewViewController.h"
#import "MoveableSubview.h"

@implementation MoveSubviewViewController

    - (void)viewDidLoad
    {
        [super viewDidLoad];

        // Create two overlapping subviews. The blue subview will start at the top of
        //  the frame and extend down two thirds of the frame.
        CGRect superviewFrame = self.view.frame;
        CGRect view1Frame = CGRectMake( superviewFrame.origin.x, superviewFrame.origin.y,
                                       superviewFrame.size.width, superviewFrame.size.height * 2 / 3);
        MoveableSubview *view1 = [[MoveableSubview alloc] initWithFrame: view1Frame];
        view1.backgroundColor = [UIColor blueColor];
        [self.view addSubview: view1];
        [view1 release];

        // The green subview will start one third of the way down the frame and
        //  extend all the to the bottom.
        CGRect view2Frame = CGRectMake( superviewFrame.origin.x,
                                       superviewFrame.origin.y + superviewFrame.size.height / 3,
                                       superviewFrame.size.width, superviewFrame.size.height * 2 / 3);
        MoveableSubview *view2 = [[MoveableSubview alloc] initWithFrame: view2Frame];
        view2.backgroundColor = [UIColor greenColor];
        [self.view addSubview: view2];
        [view2 release];
    }

    @end

子视图类是MoveableSubview与另一简单包头

#import <UIKit/UIKit.h>

@interface MoveableSubview : UIView
{
}
@end

与实施

#import "MoveableSubview.h"

@implementation MoveableSubview

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    // Move this view to the front in the superview.
    [self.superview bringSubviewToFront: self];
}

@end

要做的事情是添加

[self.superview bringSubviewToFront: self];

之前,设置动画线。



文章来源: zooming animation problem in ScrollView - Ipad