HOME 首頁
SERVICE 服務產(chǎn)品
XINMEITI 新媒體代運營
CASE 服務案例
NEWS 熱點資訊
ABOUT 關于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    opaque(opaque什么意思)

    發(fā)布時間:2023-03-12 20:55:51     稿源: 創(chuàng)意嶺    閱讀: 53        問大家

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于opaque的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    ChatGPT國內(nèi)免費在線使用,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等

    只需要輸入關鍵詞,就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端

    官網(wǎng):https://ai.de1919.com

    本文目錄:

    opaque(opaque什么意思)

    一、opaque的反義詞是什么?

    fuck transparent!

    二、ios opaque是什么屬性

    這三個屬性都是針對把FLASH放到網(wǎng)頁中起作用的。在本地使用FLASH用不到。比如有一個FLASH,背景色為黑色。transparent:即把FLASH背景設成透明,在網(wǎng)頁上就可以把FLASH放到圖片或者文字之上。opaque:設置成這個后FLASh可以被調(diào)整層深。Window:就是FLASH是單獨的一層,和瀏覽的網(wǎng)頁上的內(nèi)容是不相干的,總是在所有東西的上面。

    三、iOS心法-UIView

    UIView是UIResponder的四大直接子類之一,是UI兩大類之一。為構建完整的iOS系統(tǒng)知識框架,下文整理UIView的沒用過的或不知道的或似懂非懂的屬性和方法,并逐個吃透。目標通讀 Apple api 文檔。

    isOpaque、tintColor、mask、isExclusiveTouch、window、isDescendant(of:)、didMoveToSuperview、didMoveToWindow、directionalLayoutMargins、layoutMargins、preservesSuperviewLayoutMargins、layoutMarginsDidChange、safeAreaInsets、safeAreaLayoutGuide、insetsLayoutMarginsFromSafeArea、constraints、addConstraint、layoutGuides、intrinsicContentSize

    1、isOpaque

    isOpaque屬性的真實用處是給繪圖系統(tǒng)提供一個性能優(yōu)化開關!如果了解 opaque,需要點屏幕繪制的知識,屏幕上的每個像素點都是通過 RGBA 值(Red、Green、Blue 三原色再配上 Alpha 透明度)表示的,當紋理(UIView 在繪圖系統(tǒng)中對應的表示項)出現(xiàn)重疊時,GPU 會按照 Result = Source + Destination * (1 - SourceAlpha)公式計算重疊部分的像素。

    Result 是結果 RGB 值,Source 為處在重疊頂部紋理的 RGB值,Destination 為處在重疊底部紋理的 RGB 值。

    當 SourceAlpha 為 1 時,繪圖系統(tǒng)認為下面的顏色全部被遮蓋住了,Result = Source,如果 Source 的 Alpha 不為 0,上下層顏色就會進行合成,所以 opaque 默認設置 YES,提升繪制性能,如果開發(fā)中 UIView 是不透明的,opaque 設置為YES, 如果 opaque 設置NO,那么Alpha應該小于1。

    總結:isOpaque是一個性能開關,=false會走混合計算邏輯R=S+D*(1-SA)。alpha是一個顯示屬性,也會走混合計算邏輯。自定義UIView的時候在draw方法內(nèi)使用,系統(tǒng)提供的類設置該屬性無效。

    思考:直接設置alpha就行了,opaque用處是什么?自定義UIView的時候在draw方法內(nèi)使用,系統(tǒng)提供的類UILabel等設置該屬性無效。

    參考: UIView的 alpha、hidden、opaque屬性之間的關系和區(qū)別

    2、tintColor

    具有傳遞性。舉個例子,當我們用xib或者storyboard拖一個UIButton進入面板后,會發(fā)現(xiàn)UIButton的顏色為藍色,可能有人會問為什么是這個顏色呢? 這是因為,默認情況下,一個視圖的tintColor為nil,它會使用父視圖tintColor屬性的值。當我們?yōu)橹付ㄒ晥DtintColor屬性賦值以后,這個色值會自動傳播到視圖層次結構(以當前視圖為根視圖)中所有的子視圖上。如果在視圖層次結構中沒有找到一個非默認的tintColor值,則會使用系統(tǒng)定義的顏色值(藍色,RGB值為[0,0.478431,1]),所以這就是為什么我們拖一個button后顯示的是藍色了。對一個視圖來說, 如果沒有設置它的tintColor,那么它會默認使用父視圖的tintColor,如果設置了這個視圖的tintColor, 那么它就會把這個tintColor傳遞給沒有設置tintColor的所有子視圖。

    tintColorDidChange方法會在視圖的tintColor或tintAdjustmentMode屬性改變時自動調(diào)用。另外,如果當前視圖的父視圖的tintColor或tintAdjustmentMode屬性改變時,也會調(diào)用這個方法。

    模式顏色:夜間模式的顏色等

    思考:用處?UIImageView使用tintColor、APP設置全局TintColor

    參考: 小談iOS UIView的tintColor屬性

    3、clearsContextBeforeDrawing

    ???

    假定您的PNG始終填充整個UIImageView,則應使用以下方法獲得最佳性能:opaque = YES,clearsContextBeforeDrawing = NO.在此模式下,backgroundColor無關緊要.像素只需替換為新的圖像數(shù)據(jù)即可.

    對于單色背景上的透明PNG,最快的是:opaque = YES,clearsContextBeforeDrawing = YES和backgroundColor匹配您需要的任何內(nèi)容.在這種情況下[UIColor whiteColor].

    4、mask

    UIView.mask和layer.mask原理相同,重疊部分顯示,其他部分丟掉,重疊部分,可以這樣理解,是將maskView每個point的alpha賦值給View的重疊部分相對應的point,這樣view的重疊每個point都有個alpha值了,view重疊部分就可能顯示多種透明色。

    應用:UILabel漸進式顯示(歌詞同步)、UIImageView部分展示(切圓角或多圖階段展示)。mask 可以配合CAGradientLayer、CAShapeLayer 使用。可以實現(xiàn)蒙層透明度、顯示不同形狀圖層、圖案鏤空、文字變色等等功能。mask在動畫中使用,可以產(chǎn)生很好的動畫效果。

    參考: UIView的 maskView 屬性

    5、layerClass

    提供了對外的override屬性,可以替換view.layer為其他layer,如CATiledLayer 、AVPlayerLayer、TBPaperLayer等。不過可以通過另一種方式:自定義View,新加一個屬性XXLayer。

    layer的出現(xiàn)是為了mac OS 和 iOS的解耦和跨平臺。

    6、userInteractionEnabled

    在一次動畫執(zhí)行流程中,動畫包含的所有UIView都會被臨時禁止用戶交互,而不管每個UIView本身userInteractionEnabled此時的屬性值是YES還是NO。但是在配置動畫時,通過添加allowUserInteraction選項可以禁止這種行為的發(fā)生,使UIView即使是在執(zhí)行動畫期間依然能響應用戶事件。userInteractionEnabled屬性默認值為YES,但UIView的一些子類中對該屬性進行了覆蓋,并將其默認值設置為了NO,其中UIImageView和UILabel就是這樣的類

    7、isMultipleTouchEnabled

    一個view的多指觸控開關,不包含子view。不能通過設置父view=false實現(xiàn)兩個子view不能同時點擊。不影響手勢。

    8、isExclusiveTouch

    阻止向同一window中的其他視圖傳遞觸摸事件

    9、frame

    frame改變將會自動重新顯示,且不調(diào)用draw方法。想讓調(diào)用draw方法可以設置contentMode為redraw。該屬性可以動畫化(alpha也可以)。如果transform包含非恒等變換時要用center和bound代替frame,否則會出問題 frame和transform的坑

    10、transform

    可以動畫化。

    改變frame的時候,不要用frame屬性,用center和bound。

    改anchor point的時候用CALayer的anchorPoint屬性。

    iOS8之后transform不能影響自動布局, AutoLayout布局與Transform的沖突

    11、window

    每一個view都有一個該屬性,當view被add到父view上的時候,該值不在是nil,而是當前window。每個view都是事件響應者鏈中的一個節(jié)點,相應地,每一個節(jié)點view都有一個根節(jié)點window的引用。

    12、addSubview

    給next responder賦值為superview。

    給window賦值。

    繼承父view的alpha。

    view只能有一個superview,所以一個view不能加載兩個view上。

    13、removeFromSuperview

    注意判空。

    不要在視圖的draw(_:)方法中調(diào)用這個方法。

    14、isDescendant

    是否是subview或他本身。是視圖層次關系的判斷。注意isMember是繼承關系的判斷,不一樣。

    15、didAddSubview

    有子view才會調(diào)用。任何adding a subview 的方法都會調(diào)用該方法,默認無實現(xiàn),子類可重寫實現(xiàn)額外的操作。UIView的生命周期還有willRemoveSubview、willMove(toSuperview)、didMoveToSuperview、willMove(toWindow)、didMoveToWindow等。

    remove的時候也會調(diào)用didMoveToSuperview和didMoveToWindow,只是順序不同

    16、directionalLayoutMargins

    iOS11之后的,考慮到當前的語言方向(阿拉伯語是從右到左)的內(nèi)容布局邊距。默認為8,也可自行設置。preservesSuperviewLayoutMargins是否保護父視圖邊距,默認false。

    17、addLayoutGuide

    引入UILayoutGuide系統(tǒng)的一系列功能性方法之一。UILayoutGuide是 iOS 9 中增加的幫助開發(fā)者在使用auto layout布局時的一個虛擬占位對象。所有需要一個虛擬View幫助的事情都可以交給UILayoutGuide來做。它更輕量、更快速、更高效。并沒有真正的創(chuàng)建一個View,只是創(chuàng)建了一個矩形空間,只在進行auto layout時參與進來計算。

    18、systemLayoutSizeFitting(_ targetSize: CGSize)

    該方法為視圖返回一個大小值,該值最優(yōu)地滿足視圖的當前約束,并且盡可能接近targetSize參數(shù)中的值。這個方法實際上并沒有改變視圖的大小。參數(shù)size可以設置layoutFittingCompressedSize或layoutFittingExpandedSize獲得一個盡可能小或大的size。還可以設置fittingSizeLevel或low或high的約束優(yōu)先級來返回需要的最接近或高度優(yōu)先或寬度優(yōu)先的大小。

    思考:和sizeThatFit有什么區(qū)別?可以在layout異步布局之前拿到frame嗎?

    用處:可以獲取自動填充的靜態(tài)cell的高度。可以在autolayout時拿到size(也可以用layoutIfNeeded)。

    19、intrinsicContentSize

    只讀屬性,可通過重寫來更改相應控件的內(nèi)置尺寸大小,告知系統(tǒng)值已改變。在AutoLayout中,它作為UIView的屬性(不是語法上的屬性),意思就是說我知道自己的大小,如果你沒有為我指定大小,我就按照這個大小來。比如:大家都知道在使用AutoLayout的時候,UILabel是不用指定尺寸大小的,只需指定位置即可,就是因為,只要確定了文字內(nèi)容,字體等信息,它自己就能計算出大小來。同樣的UILabel,UIImageView,UIButton等這些組件及某些包含它們的系統(tǒng)組件都有 Intrinsic Content Size 屬性,也就說他們都有自己計算size的能力。

    使用場景:自定義視圖重寫該方法。如在MBProgressHUD添加自定義視圖時,若給定視圖為不確定大小的圖片,展示出來的效果就很差強人意,這時就需要更改對應View中的內(nèi)置大小來適配合適的尺寸。

    invalidateIntrinsicContentSize():當自定義視圖中的某些內(nèi)容發(fā)生變化,使其固有內(nèi)容大小失效時調(diào)用此函數(shù)。這允許基于約束的布局系統(tǒng)在下一個布局過程中考慮新的內(nèi)在內(nèi)容大小。重寫intrinsicContentSize時可主動調(diào)用該方法通知系統(tǒng)內(nèi)容大小變化了。另外還有 詳解 intrinsicContentSize 及 約束優(yōu)先級/content Hugging/content Compression Resistance

    20、alignmentRect

    Autolayout系統(tǒng)的布局操作是基于alignment rect而非frame。絕大部分情況下它們是一樣的,但是當你設置了alignmentRectInsets或者重寫了alignmentRectForFrame:和frameForAlignmentRect:時就需要注意兩者的差異。

    alignmentRec + alignmentRectInsets = frame

    forFirstBaselineLayout:使用baseLine做約束的時候autolayout會調(diào)用該方法返回的view。重寫此屬性以返回基于文本的子視圖(例如,UILabel或非滾動的UITextView)。返回的視圖必須是接收方的子視圖。

    應用?自定義view,重寫方法返回一個view,然后設置其他基于baseline的約束

    21、Debugging Auto Layout

    constraintsAffectingLayout:返回影響x/y軸的視圖布局的約束

    hasAmbiguousLayout:視圖是否有模糊(不完全確定)約束

    exerciseAmbiguityInLayout:在不同的有效值之間以模糊的布局隨機改變視圖的約束,用于檢測有效約束和必要約束

    22、sizeToFit與sizeThatFits

    sizeThatFits主要用于計算,返回一個最佳size,不更改view的實際大小。

    sizeToFit不應該在子類中被重寫,應該重寫sizeThatFits,調(diào)用sizeToFit會自動調(diào)用sizeThatFits方法;

    sizeToFit和sizeThatFits方法都沒有遞歸,對subviews也不負責,只負責自己

    23、setNeedsLayout

    標記下一個更新周期(1/60s)中觸發(fā)布局更新。由于此方法不強制立即更新,而是等待下一個更新周期,因此您可以使用它在更新任何視圖之前使多個視圖的布局失效。這種行為允許您將所有布局更新合并到一個更新周期中,這 通常有利于提高性能 。layoutIfNeeded:如果布局更新正在等待,則立即布局子視圖。常用來在snp或masonry布局的時候獲取view的frame

    23、requiresConstraintBasedLayout

    如果你在updateConstraints這個方法里面給自定義的控件更新控件的constraint,那么需要重寫requiresConstraintBasedLayout方法,并且返回YES.否則的話,就不會顯示該控件.直接在init方法中設置自定義控件的constraint,那么則不需要重寫也可以顯示。

    translatesAutoresizingMaskIntoConstraints:將 frame 布局 自動轉化為 約束布局,轉化的結果是為這個視圖自動添加所有需要的約束,如果我們這時給視圖添加自己創(chuàng)建的約束就會約束沖突。

    24、overrideUserInterfaceStyle

    iOS13新增的設置light/dark模式。設置view之后會影響該view所在的vc的所有view(不包含child vc),設置window之后會影響window的所有view和vc。

    semanticContentAttribute:設置左右布局翻轉。一般用在語言翻轉。也可用在按鈕圖片文字的左右翻轉。

    25、addInteraction

    主要涉及UIInteraction。

    UIContextMenuInteraction:iOS13可用,上下文菜單功能。如系統(tǒng)相冊列表長按圖片,彈出一個帶可操作菜單的預覽界面。

    UIDragInteraction+UIDropInteraction:iOS11可用。在mac上可以將圖片直接拖入聊天軟件進行發(fā)送,可以將文檔、音樂、視頻文件等文件拖入相應應用程序直接進行使用。在iPhone上能應用內(nèi)使用。iPad上能跨應用使用。

    UIIndirectScribbleInteraction:iOS14可用。在ipad上使用apple pencil手寫輸入文本。

    UILargeContentViewerInteraction:iOS13可用。在超大字體(輔助功能)的情況下,內(nèi)容視圖展示文案會很大,但是一些系統(tǒng)的bar button如tabbar item之類的仍然很小,這里提供一種補償方式,手指按住的時候會彈出一個大內(nèi)容視圖查看器。

    UIPencilInteraction:iOS12.1可用。Apple Pencil 雙擊的處理對象

    UIPointerInteraction:iOS13.4可用。指針交互??

    UIScribbleInteraction:iOS14可用。接受或抑制手寫輸入文本

    UISpringLoadedInteraction:iOS11可用。彈簧加載交互??

    UITextInteraction:iOS13可用。??

    26、draw

    當這個方法被調(diào)用時,UIKit已經(jīng)為你的視圖配置了適當?shù)睦L圖環(huán)境,但是不要建立對圖形上下文的強引用,因為它會在調(diào)用draw(_:)方法之間發(fā)生變化。如果你直接子類化UIView不需要調(diào)用super。如果子類化一個不同的視圖類應該在你的實現(xiàn)中調(diào)用super。調(diào)用setNeedsDisplay方法會調(diào)用draw重新繪制。

    27、viewPrintFormatter

    UIViewPrintFormatter??

    28、canBecomeFocused

    默認值為false。此屬性通知 焦點引擎 視圖是否能夠被聚焦。有時即使一個視圖返回true,一個視圖可能因為以下原因而不能被聚焦:視圖是隱藏的。視圖將alpha設置為0。視圖將userInteractionEnabled設置為false。視圖當前不在視圖層次結構中。

    inheritedAnimationDuration:在一個UIView animation block中獲取duration的值。

    29、addMotionEffect

    UIMotionEffect:隨著手機的傾斜微移動view

    30、restorationIdentifier

    視圖恢復用

    31、snapshotView

    截圖用??捎脠鼍埃禾砑淤徫镘嚕苿咏粨QCel,點擊放大圖片。多window截圖可以先逐個截圖然后合并圖片。直播截圖是opengl實現(xiàn)的,要用drawHierarchy方法。

    32、viewWithTag

    會先遍歷自己,再遍歷子views。如果view和subview1是一個tag,找到的是view,而不是subview1。

    33、convert(_ point

    獲取cell的位置。要先獲取cell在列表中的位置,再獲取列表在view中的位置。

    34、hitTest和point(inside

    返回觸碰點的最佳的view。內(nèi)部實現(xiàn)如下:

    // 1.判斷自己能否接收觸摸事件

    if (self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) return nil;

    // 2.判斷觸摸點在不在自己范圍內(nèi)

    if (![self pointInside:point withEvent:event]) return nil;

    // 3.從后往前遍歷自己的子控件,看是否有子控件更適合響應此事件

    35、endEditing(_ force)

    讓subviews中的first responder的文本控件失去響應

    36、動畫

    demo和效果

    總結:費勁弄完,效果甚微。很多api看了文檔描述也不知道是什么效果和怎么使用。重點:效果、使用場景、demo。接下來計劃-常用的大體都過下。不知道怎么使用的查外網(wǎng)或看wwdc。

    四、上瓷時說的op 指什么

    遮色瓷,習慣叫OP(英文opaque)。

    以上就是關于opaque相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。


    推薦閱讀:

    openai被誰收購了(openai創(chuàng)始人)

    openai怎么使用(open aip)

    自己制作logo怎么做(怎么用photoshop制作logo)

    上海酒吧營銷員工一個月多少錢(上海酒吧營銷員工一個月多少錢?。?/a>

    淘寶店購買量怎么提高(淘寶購買數(shù)量怎么增加)