2014-03-05 39 views
1

an iPhone app幾個「信牌」可以左右拖動:如何在touchesBegan的自定義UIView中調整UILabel的位置?

app screenshot

拖動和顯示更大的圖像和字體在Tile.m實現:

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event 
{ 
    [_normal setHidden:YES]; 
    [_dragged setHidden:NO]; 
    [_letter setFont:[UIFont systemFontOfSize:60]]; 
    [_value setFont:[UIFont systemFontOfSize:20]]; 

    [self.superview bringSubviewToFront:self]; 
} 

- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInView:self]; 
    CGPoint previous = [touch previousLocationInView:self]; 
    self.frame = CGRectOffset(self.frame, 
           (location.x - previous.x), 
           (location.y - previous.y)); 
} 

- (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event 
{ 
    [_normal setHidden:NO]; 
    [_dragged setHidden:YES]; 
    [_letter setFont:[UIFont systemFontOfSize:36]]; 
    [_value setFont:[UIFont systemFontOfSize:16]]; 
} 

這工作得很好,除了小UILabel在右下角(應顯示一個整數 - 字母的「值」)。

我試圖使自動佈局和添加約束......以及在Tile.xib禁用自動佈局(這裏fullscreen):

Xcode screenshot

,但無法找到一個滿意的解決方案,但(調整後的位置沒有按」不得不在科學上確切)。

作爲一個iOS編程新手我不確定我有什麼選擇,有誰可以請建議如何解決它最好?

就像將value標籤的基線與letter標籤的底線對齊,並確保它們只是彼此接觸(而不是相交) - 可能嗎?

+1

爲了確保rect不交叉使用方法'CGRectIntersectRect'並且每當這個條件滿足時相應地將交叉矩形的框架移動到某個點。 –

回答

1

在我看來,你正在處理系統中的2個非常知名的狀態,爲什麼不簡單地定義2個靜態位置狀態,你需要將標籤放在你的UIView中,並將它們的位置靜態地設置在你的UIView中代碼也!

您已經設置了UILabels的尺寸,爲什麼不是他們的位置!

它還看來,如果你是縮放全紅矩形,以及,你可以試試這個方法還有:

Scale UIView and all its children

如果縮放整個的UIView,然後相對定位和調整您的保持它看起來像小時一樣。

+0

+1謝謝。我不知道Interface Builder中有「位置狀態」(我只知道Apache/Adob​​e Flex中的「狀態」)。你有一個文檔或教程?或者你的意思是截圖? –

+0

@AlexanderFarber - 你已經有了與touchesBegan,touchesMoved和touchesEnded一起設置的狀態。當touchesBegan進來時,只需簡單地設置'_letter'和'_value'的位置,基本上與在touchesMoved中設置self.frame位置的方式基本相同,只有您可以增加大小,在touchesBegan中移動字母和數字位置, touchesEnded。 – trumpetlicks

+0

在源代碼中?或者是否有可能在IB? –

相關問題