2009-05-05 57 views

回答

14

你說你用過UIImageView。用UIImageView繪製圖像意味着初始化它,然後將其添加到容器視圖。

難道你不能在你的循環中使用這段代碼嗎?

[containerView insertSubview:image atIndex:[[containerView subviews] count]] 

其結果將是,該視圖中添加第一個是在視圖堆棧的頂部(我沒能還測試這雖然:))

+0

如果所有的索引都相同,會發生什麼? – Thanks 2009-05-05 23:20:42

+1

好吧,他們不能從一個例子中增加一個att索引0,使堆棧中的所有其他變量碰撞。 – ullmark 2009-05-06 07:32:39

3

不是直接。

一種解決方案是給UIViews一個z-index屬性;一個定義您的深度級別的整數。然後,您可以通過包含UIView的NSArray(myArray)進行演示,將它們按深度順序添加爲子視圖。

2

其實,據我所知,沒有z-index的位置屬性。在視圖中繪製使用簡單的繪製模型。

您可以將您的邏輯放在繪圖循環中(即繪製您最後想要的東西),也可以使用Cocoa Animation,因爲與UIImageView不同,CALayers具有深度(它們是3D空間的2D投影)。請參閱here以供參考。

+0

是的,我想每一個的UIImageView是一種基於一個的CALayer? – Thanks 2009-05-05 23:16:58

+0

是的,想想吧,在iPhone中所有的視圖都有層次支持。 挖了一點,我發現UIImageView文檔中的以下方法: - insertSubview:aboveSubview: - insertSubview:belowSubview: – Hejazzman 2009-05-06 23:01:31

19

,而不是使用insertSubiew你可以試試:

- (void)bringSubviewToFront:(UIView *)view 
- (void)sendSubviewToBack:(UIView *)view 
+0

這種技術適用於以編程方式添加圖像(或其他視圖)並且想將其推送到背景的情況。在我的情況下,我在界面生成器中設置了一些標籤,但我在代碼中添加了可伸縮背景圖像。如果不使用sendSubviewToBack:,背景圖片會出現在標籤的頂部。 – 2014-02-21 16:50:05

1

你真的可能要考慮使用CALayer而不是大量的UIImageView對象。 UIImageView對象非常棒,但對於激烈的繪製,CALayer的重量更輕,效率更高(但如果您需要用戶與圖像交互,視圖對象更好)。這真的取決於你在做什麼。 CALayers確實有一個zPosition屬性。這是UIKit在視圖堆棧中排列UIView位置時使用的。

3

我有同樣的問題。我需要具有最高和最低z-索引的子視圖元素。從我的測試中我發現,UIKit根據它們的z位置將子元素排列在子視圖屬性中。例如,如果您採取 [self.scrollview subviews] 。第一個數組元素是最後面的子視圖。索引最高的數組元素是最前面的子視圖。如果使用

- (void)bringSubviewToFront:(UIView *)view 
- (void)sendSubviewToBack:(UIView *)view` 

subviews數組將相應地重新排序。

3

如果有裁判下面的視圖/上述需要添加,您可以使用副視點以下

[self.view insertSubview:<#(UIView *)#> belowSubview:<#(UIView *)#>]; 
[self.view insertSubview:<#(UIView *)#> aboveSubview:<#(UIView *)#>]; 
1
imageView.layer.zPosition = 100; 
6

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; 
相關問題