• IOS之UI异步刷新


    NSOperationQueue     *operationQueue; // for rendering pages on second thread

    [operationQueue waitUntilAllOperationsAreFinished];

    一句很简单的代码,可以实现UI的异步操作,知道操作完成,才进行进一步刷新。

     

    NSOperationQueue是一个Operation执行队列,你可以将任何你想要执行的Operation添加到Operation Queue中,以在队列中执行。同时Operation和Operation Queue提供了很多可配置选项。Operation Queue的实现中,创建了一个或多个可管理的线程,为队列中的Operation提供可高度自定的执行环境。

    DemoCode如下:

    // Don't change font feature settings until all secondary thread operations are done

    [operationQueue waitUntilAllOperationsAreFinished];

     

    // Set up our font feature bitfield for given optionName

     

    ASDFeaturesBits optionBitSelected = 0;

     

    if (([optionName rangeOfString:ASD_SMALL_CAPITALS]).length > 0 ) {

    optionBitSelected = ASDFeaturesSmallCaps;

    }

    else if (([optionName rangeOfString:ASD_RARE_LIGATURES]).length > 0 ) {

    optionBitSelected = ASDFeaturesLigatures;

    }

    else if (([optionName rangeOfString:ASD_PROP_NUMBERS]).length > 0 ) {

    optionBitSelected = ASDFeaturesPropNumbers;

    }

    else if (([optionName rangeOfString:ASD_STYLISTIC_VARS]).length > 0 ) {

    optionBitSelected = ASDFeaturesStylisticVariants;

    }

     

    if (optionBitSelected && ((optionBitSelected & ASDFeaturesFeatureMask) != 0)) {

    // Font features are most of the time exclusive so for simplicity we allow one feature at a time

    viewOptions &= ~ASDFeaturesFeatureMask;

            viewOptions |= optionBitSelected;

    }

        else {

    // Passing @"" as the option is used to turn off all options

    if ([optionName length] == 0) {

    viewOptions = 0;

    } else {

    viewOptions ^= optionBitSelected;

    }

        }

        

    if (pageViews[currCoreTextView].selectedFrame == NSUIntegerMax) {

    // No selected frame, apply font features to all doc text

    NSRange range = NSMakeRange(0, [document.attributedString length]);

    [document setFontFeatures:(viewOptions & CoreTextViewOptionsFeatureMask) range:range];

    [self relayoutDocFromPage:pageDisplayed];

    }

    else {

    // Apply font features to selected frame

    // (note that this only applies for "text" type frames)

    CoreTextViewPageInfo* page = [pagesInfo objectForKey:[NSNumber numberWithInt:pageDisplayed]];

    CoreTextViewFrameInfo* frame = [page.framesToDraw objectAtIndex:pageViews[currCoreTextView].selectedFrame];

    if (frame.frameType == ASDFrameTypeTextFlow) {

    [document setFontFeatures:(viewOptions & CoreTextViewOptionsFeatureMask) range:frame.stringRange];

    [self relayoutDocFromPage:pageDisplayed];

    }

    else if (frame.frameType == ASDFrameTypeText) {

    ApplyFontFeaturesToString(frame.value, frame.stringRange, (viewOptions & CoreTextViewOptionsFeatureMask));

                [frame refreshTextFrame];

    [self refreshPage];

    }

    }

  • 相关阅读:
    解决Servlet无法换行
    Servlet页面解析中文乱码问题
    IDEA2020版创建Servlet(Web项目)完整教程
    SPFA算法
    最短路算法Dijkstra
    搜索与图论总结
    Kruskal算法
    第10章 嵌入式Linux 的调试技术
    第9章 硬件抽象层:HAL
    第八章 让开发板发出声音:蜂鸣器驱动
  • 原文地址:https://www.cnblogs.com/wcLT/p/4753461.html
Copyright © 2020-2023  润新知