Nano Hash - криптовалюты, майнинг, программирование

Изображения заставки iOS 8 после запуска приложения

Позвольте мне начать с того, что то, что я знаю, не одобряется Apple и будет отклонено App Store, если оно будет представлено. Это не проблема, так как это не будет отправлено в любом случае. Это внутреннее приложение.

С этим сейчас покончено. Мне нужна помощь в настройке операторов if, else и else if. До перехода на iPhone 6 и 6+ мой текущий код работал для iPhone5/5s и ниже размеров экрана при загрузке и отправке правильного изображения после запуска приложения.

Моя цель здесь — включить iPhone 6/6+ в это уравнение.

Ниже приведен соответствующий код, относящийся к этому.

Это загружает изображения до нужного размера экрана.

    //Setting Splash Images
#define IS_IPHONE (!IS_IPAD)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone)

    bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136));
    if (isiPhone5) {

        // Load iPhone 5 Splash
        UIImage *splash4Inch = [UIImage imageNamed:@"[email protected]"];
        self.splash4InchPortrait = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 568.0f)];
        [self.splash4InchPortrait setImage:splash4Inch];
        [self.view addSubview:self.splash4InchPortrait];
        [self.view bringSubviewToFront:self.splash4InchPortrait];
        self.splash4InchPortrait.contentMode = UIViewContentModeScaleToFill;
    }

    else if (IS_IPAD) {
        // Load IPad Splash
        UIImage *splashPad = [UIImage imageNamed:@"Default-Portrait~ipad.png"];
        self.splashPadPortrait = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 768.0f, 1024.0f)];
        [self.splashPadPortrait setImage:splashPad];
        [self.view addSubview:self.splashPadPortrait];
        [self.view bringSubviewToFront:self.splashPadPortrait];
        self.splashPadPortrait.contentMode = UIViewContentModeScaleToFill;
    }

    else {
        // Load the iPhone 3.5" Splash
        UIImage *splash35Inch = [UIImage imageNamed:@"Default.png"];
        self.splash35InchPortrait = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
        [self.splash35InchPortrait setImage:splash35Inch];
        [self.view addSubview:self.splash35InchPortrait];
        [self.view bringSubviewToFront:self.splash35InchPortrait];
        self.splash35InchPortrait.contentMode = UIViewContentModeScaleToFill;
    }

Это скрывает/отображает указанные изображения в зависимости от того, какой размер экрана загружен.

//Get screen size
CGRect screenBounds = [[UIScreen mainScreen] bounds];
if (UIDeviceOrientationIsPortrait(self.interfaceOrientation)){
    //DO Portrait
    if (screenBounds.size.height <=480) {
        //code for 3.5-inch screen
        splash35InchPortrait.hidden = NO;
        splashRetina35InchPortrait.hidden = YES;
        splash4InchPortrait.hidden = YES;

    }else{
        // code for 3.5 Retina inch screen
        splashRetina35InchPortrait.hidden = NO;
    }

}else{
    // code for 4-inch screen
    splash35InchPortrait.hidden = YES;
    splashRetina35InchPortrait.hidden = YES;
    splash4InchPortrait.hidden = NO;

}

Это завершающий код, когда изображение исчезает.

- (void)webViewDidFinishLoad:(UIWebView *)webview {

#define IS_IPHONE (!IS_IPAD)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone)

    bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136));
    if (isiPhone5) {
        // Loading iPhone 5
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        NSLog(@"didFinish: %@; stillLoading:%@", [[webView request]URL],
              (webView.loading?@"NO":@"YES"));
    }
    else if (IS_IPAD) {
        // Loading IPAD
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        NSLog(@"didFinish: %@; stillLoading:%@", [[webView request]URL],
              (webView.loading?@"NO":@"YES"));
    }
    else {
        // Loading iPhone 3.5"
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        NSLog(@"didFinish: %@; stillLoading:%@", [[webView request]URL],
              (webView.loading?@"NO":@"YES"));
    }

}

Как видите, у меня это работает в меру своих возможностей. Мне нужно добавить код 6/6+.

Или, если кто-нибудь знает лучший, более простой способ сделать это, я весь внимание.

Основная цель — предотвратить белую вспышку после загрузки приложения. Я пытался отложить запуск, но, поскольку мое приложение в основном представляет собой веб-просмотр, это совсем не помогает.

Спасибо за чтение и помощь.


  • почему бы не использовать стандартные вещи для создания заставки? почему вы делаете это в программе? 29.10.2014
  • Хорошо, я думал, что сделал эту часть ясной. В любом слючае. Что я пытаюсь сделать/сделал, так это загрузить изображения после запуска приложения. По сути, это эффект задержки при загрузке начального веб-просмотра. Это позволяет избежать белых вспышек экрана, которые могут раздражать. Я понимаю, что вы можете использовать каталог ресурсов для загрузки изображений из ресурсов, а также создать файл запуска с пером или xib, содержащим эти изображения. Но при этом моя проблема остается. Приведенный выше код уже находится в контроллере представления, поэтому, когда мое приложение запускается, оно вызывает этот код, показывает изображения, а затем исчезает после загрузки моего веб-представления. Есть смысл? 29.10.2014

Ответы:


1

Итак, возвращаемся к этому. У меня все так, как я хочу. Задержка ушла, все изображения добавлены, даже удалось удалить выделенный контроллер представления, вызывающий эти изображения. Никаких перьев, ксибов или раскадровок.

Как мое приложение настроено сейчас. У меня есть левый ящик, если я нажму на ячейку, он загрузит это представление, но снова вызовет заставку. Не идеально. Но теперь это идеально.

Вот что я сделал.

В моем AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

//Removing splash screen user default on app launch 
    [[NSUserDefaults standardUserDefaults] setObject:@"" forKey:@"Splash"];

    [self.window setAutoresizingMask:(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)];
    [self.window setBackgroundColor:[UIColor clearColor]];
    [self.window makeKeyAndVisible];

    return YES;
}

Посмотреть контроллер:

 - (void)viewDidLoad {
        [super viewDidLoad];
        //Splash Screen View Controller defaults
        if (![@"1" isEqualToString:[[NSUserDefaults standardUserDefaults] objectForKey:@"Splash"]]) {
            [[NSUserDefaults standardUserDefaults] setValue:@"1" forKey:@"Splash"];
            [[NSUserDefaults standardUserDefaults] synchronize];

            self.splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
            [self.view setCenter:CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2)];
            [(UIImageView*)splashView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
            [self.splashView setContentMode:UIViewContentModeScaleToFill];
            [self.splashView setAutoresizingMask:(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)];
            [self.splashView setBackgroundColor:[UIColor clearColor]];
            [self.view addSubview:splashView];        
        }

    - (void)webView:(WKWebView *)webView didFinishNavigation: (WKNavigation *)navigation {
        //Check here if still webview is loding the content
        if (self.webView.isLoading){
            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
        }

        else {
    //Splash Screen timer
            timer = [NSTimer scheduledTimerWithTimeInterval:(1.0/1.0) target:self selector:@selector(tick) userInfo:nil repeats:YES];
        }
    }

    - (void) viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        [self.webView setAutoresizingMask:(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)];

        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(didChangeOrientation:)
                                                     name:UIDeviceOrientationDidChangeNotification
                                                   object:nil];

        [self supportedInterfaceOrientations];
    }

    -(BOOL)shouldAutorotate {
        return YES;
    }

    - (void)didChangeOrientation:(NSNotification *)notification{
        [self setUpViewForOrientation:[[UIApplication sharedApplication] statusBarOrientation]];
    }

    -(void)setUpViewForOrientation:(UIInterfaceOrientation)orientation {
        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

        //
        //Splash Screen Setup
        //
        CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
        CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
        if( screenHeight < screenWidth ){
            screenHeight = screenWidth;
        }

        if (UIInterfaceOrientationIsLandscape(orientation)) {
            if (IS_IPHONE) {

                if (screenWidth == 480){
                    // iPhone 4/4s, 3.5 inch screen
                    UIImage *iPhone4 = [UIImage imageNamed:@"[email protected]"];
                    [self.splashView setImage:iPhone4];
                    [self.view addSubview:self.splashView];
                    //NSLog(@"iPhone 4/4s");
                }
                if (screenWidth == 568){
                    // iPhone 5/5s, 4.0 inch screen
                    UIImage *iPhone5 = [UIImage imageNamed:@"[email protected]"];
                    [self.splashView setImage:iPhone5];
                    [self.view addSubview:self.splashView];
                    //NSLog(@"iPhone 5/5s");
                }
                if (screenWidth == 667){
                    // iPhone 6, 4.7 inch screen
                    UIImage *iPhone6 = [UIImage imageNamed:@"[email protected]"];
                    [self.splashView setImage:iPhone6];
                    [self.view addSubview:self.splashView];
                    //NSLog(@"iPhone 6");
                }
                if (screenWidth == 736){
                    // iPhone 6+, 5.5 inch screen
                    UIImage *iPhone6Plus = [UIImage imageNamed:@"[email protected]"];
                    [self.splashView setImage:iPhone6Plus];
                    [self.view addSubview:self.splashView];
                    //NSLog(@"iPhone 6 Plus");
                }
            }

            else if (IS_IPAD) {
                if ([UIScreen mainScreen].scale == 1){
                    // iPad 2
                    UIImage *iPad = [UIImage imageNamed:@"LaunchImage-700-Landscape~ipad.png"];
                    [self.splashView setImage:iPad];
                    [self.view addSubview:self.splashView];
                    //NSLog(@"iPad");
                }
                if ([UIScreen mainScreen].scale == 2) {
                    UIImage *iPad = [UIImage imageNamed:@"LaunchImage-700-Landscape@2x~ipad.png"];
                    [self.splashView setImage:iPad];
                    [self.view addSubview:self.splashView];
                    //NSLog(@"iPad");
                }

            }
        }
        else {
            if (IS_IPHONE) {

                if (screenHeight == 480){
                    // iPhone 4/4s, 3.5 inch screen
                    UIImage *iPhone4 = [UIImage imageNamed:@"[email protected]"];
                    [self.splashView setImage:iPhone4];
                    [self.view addSubview:self.splashView];
                    //NSLog(@"iPhone 4/4s");
                }
                if (screenHeight == 568){
                    // iPhone 5/5s, 4.0 inch screen
                    UIImage *iPhone5 = [UIImage imageNamed:@"[email protected]"];
                    [self.splashView setImage:iPhone5];
                    [self.view addSubview:self.splashView];
                    //NSLog(@"iPhone 5/5s");
                }
                if (screenHeight == 667){
                    // iPhone 6, 4.7 inch screen
                    UIImage *iPhone6 = [UIImage imageNamed:@"[email protected]"];
                    [self.splashView setImage:iPhone6];
                    [self.view addSubview:self.splashView];
                    //NSLog(@"iPhone 6");
                }
                if (screenHeight == 736){
                    // iPhone 6+, 5.5 inch screen
                    UIImage *iPhone6Plus = [UIImage imageNamed:@"[email protected]"];
                    [self.splashView setImage:iPhone6Plus];
                    [self.view addSubview:self.splashView];
                    //NSLog(@"iPhone 6 Plus");
                }
            }

            else if (IS_IPAD) {
                if ([UIScreen mainScreen].scale == 1){
                    // iPad
                    UIImage *iPad = [UIImage imageNamed:@"LaunchImage-700-Portrait~ipad.png"];
                    [self.splashView setImage:iPad];
                    [self.view addSubview:self.splashView];
                    //NSLog(@"iPad");
                }
                if ([UIScreen mainScreen].scale == 2){
                    UIImage *iPad = [UIImage imageNamed:@"LaunchImage-700-Portrait@2x~ipad.png"];
                    [self.splashView setImage:iPad];
                    [self.view addSubview:self.splashView];
                    //NSLog(@"iPad");

                }
            }
        }
    }

    -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
        [self setUpViewForOrientation:toInterfaceOrientation];
    }

    - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
        [self setUpViewForOrientation:toInterfaceOrientation];
    }

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    }

    //Image animation
    - (void)tick {
        if (!webView.loading) {
            [self performSelector:@selector(fadeimage) withObject:nil afterDelay:0.0];
        }
    }
    -(void)fadeimage{
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
        [UIView setAnimationDuration:0.3];
        [self.splashView setAlpha:0.0];
        [self.webView setAlpha:1.0];
        [UIView commitAnimations];

        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

        [self.webView setUserInteractionEnabled:YES];
        [self.view setUserInteractionEnabled:YES];
    }

Почти уверен, что это все. Надеюсь, это поможет кому-то, столкнувшемуся с подобной проблемой.

25.04.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..