-
當前位置:首頁 > 創(chuàng)意學院 > 技術 > 專題列表 > 正文
opaque(opaque什么意思)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于opaque的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
ChatGPT國內(nèi)免費在線使用,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關鍵詞,就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com
本文目錄:
一、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)始人)
自己制作logo怎么做(怎么用photoshop制作logo)
上海酒吧營銷員工一個月多少錢(上海酒吧營銷員工一個月多少錢?。?/a>