Как сделать пользовательский слайдер, используя скользящий слайдер с слайдером миниатюр?

Существует проблема с настройкой цвета оттенка на представлении после представления; даже если вы сделаете это в блоке завершения presentViewController: анимированный: завершение :, это вызывает мерцание на цвет названия кнопок. Это неудобно, непрофессионально и совершенно неприемлемо.

Другие представленные решения зависят от остаточной статичности представления, что Apple не хочет делать. Ожидайте, что эти решения не сработают в будущих версиях iOS.

Единственный верный способ решить эту проблему и сделать ее повсюду - это добавить категорию в UIAlertController и swizzling viewWillAppear.

Заголовок:

//
//  UIAlertController+iOS9TintFix.h
//
//  Created by Flor, Daniel J on 11/2/15.
//

#import <UIKit/UIKit.h>

@interface UIAlertController (iOS9TintFix)

+ (void)tintFix;

- (void)swizzledViewWillAppear:(BOOL)animated;

@end

Реализация:

//
//  UIAlertController+iOS9TintFix.m
//
//  Created by Flor, Daniel J on 11/2/15.
//

#import "UIAlertController+iOS9TintFix.h"
#import <objc/runtime.h>

@implementation UIAlertController (iOS9TintFix)

+ (void)tintFix {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Method method  = class_getInstanceMethod(self, @selector(viewWillAppear:));
        Method swizzle = class_getInstanceMethod(self, @selector(swizzledViewWillAppear:));
        method_exchangeImplementations(method, swizzle);});
}

- (void)swizzledViewWillAppear:(BOOL)animated {
    [self swizzledViewWillAppear:animated];
    for (UIView *view in self.view.subviews) {
        if (view.tintColor == self.view.tintColor) {
            //only do those that match the main view, so we don't strip the red-tint from destructive buttons.
            self.view.tintColor = [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0];
            [view setNeedsDisplay];
        }
    }
}

@end

Добавить .pch (предварительно скомпилированный заголовок) в ваш проект и включить категорию:

#import "UIAlertController+iOS9TintFix.h"

Убедитесь, что вы правильно зарегистрировали свой pch в проекте, и он будет включать методы категорий в каждом классе, который использует UIAlertController.

Затем, в вашем приложении делегаты didFinishLaunchingWithOptions, импортируйте свою категорию и вызовите

[UIAlertController tintFix];

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

Это решение работает как для iOS 8 .X и iOS 9.X, и отсутствует мерцание подхода пост-презентации с изменением оттенка. Он также полностью агностик в отношении иерархии представлений подменю UIAlertController.

Счастливый взлом!

1
задан old_timer 17 January 2019 в 06:47
поделиться

1 ответ

Если вы зайдете на http://kenwheeler.github.io/slick/ и выполните поиск для синхронизации слайдера, он покажет демо, функционирующее очень похоже на то, что вы описываете. [112 ]

Чтобы перенаправить слайд по клику, в HTML сделайте ссылки на контент слайдов с помощью ссылки, указывающей, куда вы хотите перейти.

Если я не пропустил ваше намерение, это почти точно поведение ползунка, показанное на https://www.masterclass.com .

Дайте мне знать, если это поможет! Удачи!

0
ответ дан Eric Ransom 17 January 2019 в 06:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: