簡體   English   中英

點擊時如何改變UIView的風格?

[英]How to change the style of an UIView when it's tapped?

我正在使用以下代碼制作不同的UIView的tappable(它們不是從UIControl繼承):

UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(userTappedOnLink:)];
[labelView setUserInteractionEnabled:YES];
[labelView addGestureRecognizer:gesture];

但是當我們突出顯示時,我也想改變它的風格。 我怎么做?

將UILongPressGestureRecognizer而不是UITapGestureRecognizer附加到父視圖,並根據自己的喜好設置它的屬性。 跟蹤和響應選擇的方法是以適當的方式實現userTappedOnLink方法。 當手勢識別器被激活時,此方法將在很短的時間內被調用,並且您通過跟蹤識別器狀態知道發生了什么。

實現UIView子類並創建方法,例如select和deselect,並為每個方法自定義視圖屬性。 然后,只需要找到要選擇或取消選擇的UIView子類,並且可以使用UIGestureRecognizer方法在父視圖中返回點並在檢查觸摸點是否在特定子視圖幀內時迭代它的子視圖。

- (IBAction)userTappedOnLink:(UIGestureRecognizer*)sender
{

    switch (sender.state) 
    {
        case UIGestureRecognizerStateBegan:
{

        CGPoint touchPoint = [sender locationInView:self.parentView];
        for (UIView *subView in [self.parentView subViews) 
        {
            if (CGRectContainsPoint(subView.frame, tapPoint))
            {
                self.activeSubView = self.subview;
                            break;
            }
        }
                [self.activeSubView select];

        case UIGestureRecognizerStateChanged:[self.activeSubView doNothing];; break;
        case UIGestureRecognizerStateEnded:[self.activeSubView deSelect]; self.activeSubView = nil; break;
    }
}

在iOS中有兩種處理事件的方法。 第一個是使用UIView子類化並覆蓋UIView從UIResponder類繼承的方法 (即touchesBegan:withEvent,touchesMoved:withEvent,touchesEnded:withEvent,touchesCancelled:withEvent)。

第二種方法是創建手勢識別器類的新實例並將其添加到您的UIView對象(就像您所做的那樣),然后創建一個處理程序。

- (IBAction)userTappedOnLink:(UIGestureRecognizer *)sender {
    // Changing view properties.
}

在這兩種情況下,您都可以更改UIView屬性。 您可以在Apple的“事件處理指南”中找到一些有用的信息。 有很多閱讀,但你只能看看“相關的示例代碼”( TouchesSimpleGestureRecognizers )。

更改應用程序中界面元素的樣式屬性的方式取決於這些屬性是什么。 有時他們可以動畫有時他們不是。 通常,更改視圖屬性的代碼放在touchesBegin函數或手勢識別器處理程序中。 MoveMe示例代碼顯示了如何更改視圖屬性並為其設置動畫。 在“事件處理指南”的手勢識別器章節中,框架屬性已更改。

我設法通過在UIView中添加UIControl作為子視圖來解決這個問題。 UIControl具有相同的大小,具有透明背景,在突出顯示時會發生變化。 奇跡般有效!

好吧,我還沒有測試過,只是一個建議,請為此視圖處理touchesbegin,並調用[labelView addGestureRecognizer:gesture]; 功能。 也許你應該使用另一個函數, - (void)removeGestureRecognizer:(UIGestureRecognizer*)gestureRecognizer .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM