2012-05-20 30 views
2

我想知道iOS應用程序,實現帶有按鈕和滑塊的滑出式面板的最佳方式是什麼?在iOS上,實現一個完整的小部件的滑出式面板的好方法是什麼?

也就是說,應用程序將有一個小的「i」圖標在屏幕的右下角的那種樣子:

enter image description here

當該圖標被觸摸時,尺寸的面板大約1/4的屏幕會從底部滑出,顯示一個按鈕,一個滑塊或其他一些小部件。

實現它的最佳方式是什麼?使用Interface Builder還是純粹通過代碼實現它,以及用於面板的對象(UIView或具有此幻燈片/幻燈片功能的任何現有窗口小部件)? 。

回答

2

假設您將在應用程序中的多個位置使用此功能,您可能希望將其作爲可重用組件。我建議將幻燈片放在自己的視圖控制器中,如果需要的話,可以使用IB創建它的視圖。當用戶點擊'我'時,您將分配幻燈片視圖控制器,將其視圖作爲子視圖添加到您當前的視圖控制器併爲其添加動畫。如果您需要在幻燈片和當前視圖控制器之間進行通信,您可以在您的幻燈片中創建一個自定義委託協議。我承認這是做出一些假設,但可能會爲您提供一個乾淨的解決方案。

1

通過Interface Builder創建這個很痛苦(無論如何,這個工具很糟糕)。你一定要在代碼中創建它。如果你可以專注於代碼,並且不必在IB中設置神祕屬性,僅僅爲了顯示所有視圖,它也將更容易維護...

你可以嘗試像這樣實現它:

@interface SlideOutMenu: UIView { 
    UIImageView *imgView; 
    UITapGestureRecognizer *tap; 
} 

- (id)initWithImage:(UIImage *)img; 

@end 


@implementation SlideOutMenu 

- (id)initWithImage:(UIImage *)img 
{ 
    if ((self = [self initWithFrame:CGRectMake(0, someY, 44, 44)])) 
    { 
     imgView = [[UIImageView alloc] initWithImage:img]; 
     [self addSubview:imgView]; 
     [imgView release]; 

     tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_tapped)]; 
     [self addGestureRecognizer:tap]; 
     [tap release]; 
    } 
    return self; 
} 

- (void)_tapped 
{ 
    if (self.frame.origin.x > 1.0) // 1.0: some tolerance b/c of floating point numbers 
    { 
     [UIView animateWithDuration:0.3 animations:^{ 
      self.frame = CGRectMake(0, self.frame.origin.y, self.frame.size.width, self.frame.size.height); 
     }]; 
    } 
    else 
    { 
     [UIView animateWithDuration:0.3 animations:^{ 
      self.frame = CGRectMake(120.0, self.frame.origin.y, self.frame.size.width, self.frame.size.height); 
     }]; 
    } 
} 

@end 
相關問題