проблема масштабирования анимации в ScrollView - Ipad - PullRequest
0 голосов
/ 14 апреля 2011

В моем приложении у меня есть разделенный экран, в котором подробный вид представляет собой вид прокрутки. У меня есть 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 или около того, часть увеличенного изображения будет скрыта представлением таблицы сбоку ( как будто часть увеличенного изображения попадает под вид сбоку таблицы.

Можно ли как-то исправить это, чтобы мое увеличенное изображение не скрывалось панорамированием по бокам?

Надеюсь, я правильно объяснил свою проблему ...

UPDATE:

Вот код, который я использую для добавления подпредставлений для прокрутки

// 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];

скажем, например, я добавляю код для didSelectRowAtIndexPath в подпредставлении cViewController ...

1 Ответ

2 голосов
/ 15 апреля 2011

Это предположение, поскольку мне нужно знать, как ваши табличные представления добавляются в представление прокрутки, но среднее представление таблицы, вероятно, было добавлено раньше, чем боковое.Представления «складываются» в порядке добавления с последним наверху.Вам нужно будет получить представление прокрутки, чтобы переместить среднее представление вперед, используя этот метод

- (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];

перед настройкой анимации.

...