Как я могу представить UIView из нижней части экрана, как UIActionSheet? - PullRequest
9 голосов
/ 29 июля 2010

Мне бы хотелось, чтобы UIView скользил вверх от нижней части экрана (и оставался в середине экрана), как UIActionSheet.Как я могу это сделать?

ОБНОВЛЕНИЕ: Я использую следующий код:

TestView* test = [[TestView alloc] initWithNibName:@"TestView" bundle:nil];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.4];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];

test.view.center = CGPointMake(160,100);
//test.view.frame = CGRectMake(0, 0, 160, 210);
[[[UIApplication sharedApplication] keyWindow] addSubview:test.view];

[UIView commitAnimations];  

Вид, кажется, анимируется из угла и появляется в углу,Как я могу заставить его скользить снизу вверх?Близко!

Ответы [ 5 ]

4 голосов
/ 29 июля 2010

Одним из способов было бы использование существующего модального контроллера вида на контроллере вида:

presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated

Для получения дополнительной информации ознакомьтесь с документацией UIViewController .

РЕДАКТИРОВАТЬ : если вы хотите видеть изображение в середине экрана, вам нужно анимировать его в положение, как указывал @jtbandes. Я предлагаю также добавить немного конфет в блок анимации UIView:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.4];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];

myView.center = CGPointMake(x,y);

[UIView commitAnimations];

Затем вы можете переместить его снова, если вам нужно перейти на полный экран или закрыть его.

4 голосов
/ 29 июля 2010

Сделайте то, что сделал Мэтт, но просто измените значения и направление.У меня есть код дома, чтобы сделать это снизу, если понадобится позже (я обновлю этот пост).

Ссылка: http://cocoawithlove.com/2009/05/intercepting-status-bar-touches-on.html

Также не забудьте взятьнемного кода, который смещает основной вид вниз (так что вместо этого UIView просто выскакивает сверху, как ActionSheet)

Обновлен с кодом:

Это то, что яиспользовать в одном из моих приложений, чтобы показать / скрыть небольшой вид «параметров»:

- (void)toggleOptions:(BOOL)ViewHidden
{
// this method opens/closes the player options view (which sets repeat interval, repeat & delay on/off)

if (ViewHidden == NO)
{
    // delay and move view out of superview
    CGRect optionsFrame = optionsController.view.frame;

    [UIView beginAnimations:nil context:nil];

    optionsFrame.origin.y += optionsFrame.size.height;
    optionsController.view.frame = optionsFrame;

    [UIView commitAnimations];

    [optionsController.view
     performSelector:@selector(removeFromSuperview)
     withObject:nil
     afterDelay:0.5];
    [optionsController
     performSelector:@selector(release)
     withObject:nil
     afterDelay:0.5];
    optionsController = nil;
}
else
{
    optionsController = [[PlayOptionsViewController alloc] init];

    //
    // Position the options at bottom of screen
    //
    CGRect optionsFrame = optionsController.view.frame;
    optionsFrame.origin.x = 0;
    optionsFrame.size.width = 320;
    optionsFrame.origin.y = 423;

    //
    // For the animation, move the view up by its own height.
    //
    optionsFrame.origin.y += optionsFrame.size.height;

    optionsController.view.frame = optionsFrame;
    [window addSubview:optionsController.view];

    [UIView beginAnimations:nil context:nil];

    optionsFrame.origin.y -= optionsFrame.size.height;
    optionsController.view.frame = optionsFrame;

    [UIView commitAnimations];
}
}
1 голос
/ 29 июля 2010

Вам придется самостоятельно перемещать вид, установив его center или frame. Я дам вам понять, на что их установить. Но для анимации:

// set the view to its initial position here...

[UIView beginAnimations:nil context:NULL];
// move the view into place here...
[UIView commitAnimations];
0 голосов
/ 10 июня 2015

Попробуйте это решение .... оно работает

#pragma mark - Date Selector View PresentModelView with Transparent ViewController

- (void) showModal:(UIView*) modalView {

   CGRect  rect=modalView.frame;
   rect.origin=CGPointMake(0, 0);
   self.tutorialView.frame=rect;

    UIWindow *mainWindow = [(AppDelegate *)[UIApplication sharedApplication].delegate window];

    CGPoint middleCenter;


    middleCenter = CGPointMake(modalView.center.x, modalView.center.y);

    CGSize offSize = [UIScreen mainScreen].bounds.size;

    CGPoint offScreenCenter = CGPointMake(offSize.width / 2.0, offSize.height * 1.5);
    modalView.center = offScreenCenter;

    if ([[mainWindow subviews] containsObject:modalView]) {
        [modalView removeFromSuperview];
    }

    [mainWindow addSubview:modalView];

    [mainWindow bringSubviewToFront:modalView];
    // Show it with a transition effect
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];
    // animation duration in seconds
    modalView.center = middleCenter;
    [UIView commitAnimations];

}

// Use this to slide the semi-modal view back down.
- (void) hideModal:(UIView*) modalView {

    CGSize offSize = [UIScreen mainScreen].bounds.size;
    CGPoint offScreenCenter = CGPointMake(offSize.width / 2.0, offSize.height * 1.5);
    [UIView beginAnimations:nil context:(__bridge void *)(modalView)];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(hideModalEnded:finished:context:)];
    modalView.center = offScreenCenter;
    [UIView commitAnimations];

}

- (void) hideModalEnded:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {

    UIView *modalView = (__bridge UIView *)context;
    [modalView removeFromSuperview];
}
0 голосов
/ 12 октября 2013

Прочтите этот пост: http://blog.yetanotherjosh.com/post/33685102199/3-ways-to-do-a-vertical-transition-with

Я собираюсь использовать модальное окно.

...