我建立了一個圖像網格,我從頂部開始,在整個地方創建UIImageView對象。現在我希望它們重疊一點,但是我繪製的最後一個是最上面的那些。我想以編程方式設置z位置,這樣我繪製的第一個將是最上面的那個。有沒有爲UIImageView對象的z位置設置某種z-index的方法?
回答
你說你用過UIImageView。用UIImageView繪製圖像意味着初始化它,然後將其添加到容器視圖。
難道你不能在你的循環中使用這段代碼嗎?
[containerView insertSubview:image atIndex:[[containerView subviews] count]]
其結果將是,該視圖中添加第一個是在視圖堆棧的頂部(我沒能還測試這雖然:))
不是直接。
一種解決方案是給UIViews一個z-index屬性;一個定義您的深度級別的整數。然後,您可以通過包含UIView的NSArray(myArray)進行演示,將它們按深度順序添加爲子視圖。
其實,據我所知,沒有z-index的位置屬性。在視圖中繪製使用簡單的繪製模型。
您可以將您的邏輯放在繪圖循環中(即繪製您最後想要的東西),也可以使用Cocoa Animation,因爲與UIImageView不同,CALayers具有深度(它們是3D空間的2D投影)。請參閱here以供參考。
,而不是使用insertSubiew你可以試試:
- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view
這種技術適用於以編程方式添加圖像(或其他視圖)並且想將其推送到背景的情況。在我的情況下,我在界面生成器中設置了一些標籤,但我在代碼中添加了可伸縮背景圖像。如果不使用sendSubviewToBack:,背景圖片會出現在標籤的頂部。 – 2014-02-21 16:50:05
你真的可能要考慮使用CALayer而不是大量的UIImageView對象。 UIImageView對象非常棒,但對於激烈的繪製,CALayer的重量更輕,效率更高(但如果您需要用戶與圖像交互,視圖對象更好)。這真的取決於你在做什麼。 CALayers確實有一個zPosition屬性。這是UIKit在視圖堆棧中排列UIView位置時使用的。
我有同樣的問題。我需要具有最高和最低z-索引的子視圖元素。從我的測試中我發現,UIKit根據它們的z位置將子元素排列在子視圖屬性中。例如,如果您採取 [self.scrollview subviews]
。第一個數組元素是最後面的子視圖。索引最高的數組元素是最前面的子視圖。如果使用
- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view`
subviews數組將相應地重新排序。
如果有裁判下面的視圖/上述需要添加,您可以使用副視點以下
[self.view insertSubview:<#(UIView *)#> belowSubview:<#(UIView *)#>];
[self.view insertSubview:<#(UIView *)#> aboveSubview:<#(UIView *)#>];
imageView.layer.zPosition = 100;
https://stackoverflow.com/a/4631895/2482283
可以使用的z位置屬性視圖的圖層(它是一個CALayer對象)來更改視圖的z-index。
theView.layer.zPosition = 1;
由於尤Nordling補充說,「大的值是在上面。你可以使用任何你想要的價值,包括負值。」默認值爲0.
您需要導入QuartzCore框架才能訪問圖層。只需將這行代碼添加到實現文件的頂部即可。
#import "QuartzCore/QuartzCore.h"
另一種方式(https://stackoverflow.com/a/4663526/2482283),你還可以利用uiviews方法:
@property(nonatomic,readonly) UIView *superview;
@property(nonatomic,readonly,copy) NSArray *subviews;
- (void)removeFromSuperview;
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;
- (void)addSubview:(UIView *)view;
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
- (void)bringSubviewToFront:(UIView *)view;
- (void)sendSubviewToBack:(UIView *)view;
- 1. 沒有絕對位置的Z-Index
- 2. will_paginate有沒有一種方法來設置per_page爲「所有」
- 3. 設置UIImageView位置的最佳方式
- 4. 有沒有一種方法來設置爲CABasicAnimation動畫步數?
- 5. 設置委託對象中的委託方法沒有響應
- 6. 使用MigLayout和絕對定位時,設置z順序的方法有哪些?
- 7. 「設置」對象有沒有屬性「RECAPTCHA_SECRET_KEY」
- 8. WPF ContentControl將ZIndex設置爲子ZIndex
- 9. 圖層z位置沒有效果
- 10. 有沒有一種方法可以爲JSP中的POST變量設置request.getParameter?
- 11. 有沒有一種方法可以爲Angular cli Json設置生成的路徑?
- 12. 錯誤:TypeError:對象沒有設置方法
- 13. 有某種方法可以獲得某些UIImageView屬性嗎?
- 14. 沒有設置源綁定的一種方法
- 15. 如何爲Scrollview設置zIndex?
- 16. 圖像視圖 - 是否有可能設置UIImageView dynamicaly的位置?
- 17. 設置iframe對象的Z順序
- 18. 有沒有簡捷的方法來設置許多對象屬性?
- 19. 有沒有一種方法可以爲wordpress.com配置mathjax?
- 20. 設置對象的JavaScript類,然後改變它以某種方式改變了所有實例的對象
- 21. NSIS:有沒有一種方法來設置字符串或控件的位置,使它們彼此相關?
- 22. 有沒有一種方式來設置HTML5的範圍控制?
- 23. 有沒有辦法爲Android設備設置初始方向
- 24. 對象沒有方法'佔位符'
- 25. 有沒有一種方法可以將argseparse模塊轉換爲某種類型的對象?
- 26. 私人對象沒有設置數據
- 27. AttributeError:'設置'對象沒有屬性'OSCAR_REQUIRED_ADDRESS_FIELDS'
- 28. 對象referans沒有設置ksoap2
- 29. 有沒有一種方法來設置actionBarTabTextStyle專門爲堆疊操作欄?
- 30. 以編程方式設置對象的框架沒有效果
如果所有的索引都相同,會發生什麼? – Thanks 2009-05-05 23:20:42
好吧,他們不能從一個例子中增加一個att索引0,使堆棧中的所有其他變量碰撞。 – ullmark 2009-05-06 07:32:39