2013-01-16 84 views
0

我把UIImageView放在我的Scene from Object庫中,並給它一個圖像並在.h文件中定義OUTLET。現在我想檢查它的座標,或者中心點,或者X,Y,寬度,高度。 我使用 這如何在UIView對象中獲取對象的位置和大小c

CGRect newFrameSize = CGRectMake(recycleBin.frame.origin.x, recycleBin.frame.origin.y, 
recycleBin.frame.size.width, recycleBin.frame.size.height); 

CGRect newFrameSize = recycleBin.frame; 

使用此

NSLog(@"%@", NSStringFromCGRect(newFrameSize)); 

給出相同的結果,那就是

2013-01-16 21:42:25.101 xyzapp[6474:c07] {{0, 0}, {0, 0}}

我想它的行爲當用戶點擊圖像視圖時,它將通過對用戶的放大而消失,並且將消失,並且當用戶點擊重置按鈕時,它淡入並放大回到原始形式(與以前的動畫)。 也給我提示,如何在UIImageView或任何按鈕或標籤上執行此動畫。 Thx

+0

何時調用此代碼?它在'-viewDidLoad'中嗎? – Kitsune

+0

yes上面的代碼在-viewDidLoad中調用,用於將圖像視圖幀保存到newFrameSize以供以後使用。 – user777304

回答

1

不幸的是,您無法檢查項目的實際框架,如在-viewDidLoad的IB中所設置的。最早可以檢查它(我發現)是通過覆蓋-viewDidAppear:。但是,由於-viewDidAppear:可以在整個視圖的整個生命週期中被多次調用,因此您需要確保沒有保存它處於修改狀態的框架。

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    if(savedFrame == CGRectZero) { 
     savedFrame = self.recycleBin.frame; 
     NSLog(@"Frame: %@", NSStringFromCGRect(savedFrame)); 
    } 
} 

savedFrame是一個成員變量(或者你可以把它的屬性)。

從你想要的動畫的描述,聽起來像調整框架是不是要去的方式。這聽起來像你想要獲得視圖拉伸和淡出的效果(並在重置時反過來)?如果是這樣,像這樣的代碼可能會更多,所以你在找什麼...

淡出:

float animationDuration = 2.0f; // Duration of animation in seconds 
float zoomScale = 3.0f; // How much to zoom in duration the animation 
[UIView animateWithDuration:animationDuration animations:^{ 
    CGAffineTransform transform = CGAffineTransformMakeScale(zoomScale, zoomScale); 
    self.recycleBin.transform = transform; 
    self.recycleBin.alpha = 0; // Make fully transparent 
}]; 

,然後重置視圖:

float animationDuration = 2.0f; // Duration of animation in seconds 
[UIView animateWithDuration:animationDuration animations:^{ 
    CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 1.0f); 
    self.recycleBin.transform = transform; 
    self.recycleBin.alpha = 1.0; // Make fully opaque 
}]; 

你可以玩數字來看看你是否得到了你想要的效果。 iOS中的大多數動畫實際上非常簡單。這段代碼適用於任何UIView子類。

+0

是的解決了我的問題。 1件事,什麼是CGRectZero ...我這樣做是爲了保存原始狀態..這是正確的嗎? (void)viewDidAppear:(BOOL)animated { recycleBinFrameoriginal = recycleBin.frame; (@「%@」,NSStringFromCGRect(recycleBinFrameoriginal)); } – user777304

+0

如果用戶在非默認狀態下導航離開視圖控制器並返回到該視圖控制器,那麼我在那裏有「if」。這會導致'-viewDidAppear:'被第二次調用,保存錯誤的值(如果不執行檢查)。檢查以確保'recycleBinFrameoriginal'等於CGRectZero確保它僅在該視圖的實例第一次出現時才被更新。 – Kitsune

+0

這明確地保存了我的未來。先生,當我把如果(回收BinFrameoriginal == CGRectZero){ <#語句#> } 它給出了一個錯誤:無效的操作數到二進制表達式('CGRect'(又名'結構CGRect 「)和‘的CGRect’) – user777304

0

聽起來好像您的IBOutlet沒有附加到您的班級。

打開你的視圖控制器頭文件(如果那是你財產申報是),然後尋找報關旁邊:

enter image description here

注意如何在第一IBOutlet中,圓(以左行號)被填入。這意味着它已連接到您的場景。但是,第二個不是(圓圈沒有填寫)。

+0

先生他們連接... – user777304

+0

它看起來應該可以工作。試試'NSLog(@「%@」,recycleBin);'。我猜這是'無'? – lnafziger

+0

沒有工作..但通過把它放在 - viewDidAppear得到的結果。謝謝 – user777304