Skocz do zawartości

Witaj!

Zaloguj lub Zarejestruj się aby uzyskać pełny dostęp do forum.

Zdjęcie
- - - - -

Swift - Klikanie na przeźroczysty obrazek


  • Zaloguj się, aby dodać odpowiedź
4 odpowiedzi w tym temacie

#1 SURViR

SURViR
  • 4 postów

Napisano 16 sierpnia 2016 - 16:05

Hej, na początku chciałem zaznaczyć, że jestem nowy w Swift'cie więc proszę o wyrozumiałość :)

Generalnie mam taki problem, którego przeszukując internet nie potrafię rozwiązać, mianowicie - jeśli dodam na tło UIButtona jakiś obrazek i on dajmy na to ma fragment w którym jest całkowicie przeźroczysty, to jak mogę uzyskać coś takiego, że w tamtym miejscu nie jest on klikalny? (nic się nie dzieje po naciśnięciu przeźroczystego miejsca).

 

Z góry dzięki ;)



#2 guziaster

guziaster
  • 40 postów
  • SkądChorzów

Napisano 10 września 2016 - 08:52

Według mnie to słaby pomysł i jest to nieosiągalne dla UIButtona, ale możesz zrobić swoją kontrolkę - zrób view którego tło będzie tym obrazkiem a do środka wrzuć uibutton przezroczysty i zrób go constraintami do rozmiaru jaki oczekujesz, wtedy tylko tam gdzie będzie powierzchnia buttona będzie klikalne. Ale wg mnie robienie czegoś takiego do obrazka trochę nie ma sensu :)

#3 OneGhost

OneGhost
  • 296 postów

Napisano 10 września 2016 - 11:02

Spróbuj tak:

    @IBAction func buttonTapped(sender: TestButton, forEvent event: UIEvent) {
        if let touch = event.allTouches()?.first {
            let point = touch.locationInView(sender)
            
            func pixelAlphaAtPoint(point:CGPoint) -> UInt8 {
                
                let pixel = UnsafeMutablePointer<CUnsignedChar>.alloc(4)
                let colorSpace = CGColorSpaceCreateDeviceRGB()
                let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue)
                let context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, bitmapInfo.rawValue)
                
                CGContextTranslateCTM(context, -point.x, -point.y)
                sender.layer.renderInContext(context!)
                
                pixel.dealloc(4)
                return pixel[3]
            }
            
            if pixelAlphaAtPoint(point) != 0 {
                print("PERFORM ACTIONS")
                // Tutaj zrób to co ma robić button
            }
        }
    }

Zwróć uwagę, żeby przy podpinaniu akcji dodać event


Użytkownik Damian Dudycz edytował ten post 10 września 2016 - 11:03


#4 guziaster

guziaster
  • 40 postów
  • SkądChorzów

Napisano 11 września 2016 - 06:47

Nie polecaj początkującemu koledze używania unsafe i ręcznej alokacji. Takie rzeczy robić w tak prostym rozwiązaniu, to tak jakbyśmy tu próbowali uczyć sieć neuronowa do rozpoznawania kolorów. Dużo prostsze, bezpieczniejsze i bardziej uniwersalne jest proponowane przeze mnie rozwiązanie. No chyba, ze przezroczystości są gdzieś na środku albo w dziwnym miejscu...

#5 OneGhost

OneGhost
  • 296 postów

Napisano 11 września 2016 - 08:39

Gość zadał konkretne pytanie, to mu odpowiedziałem dokładnie, nie rozumiem w czym problem. Od ciebie ma alternatywę, jeśli bedzie chciał to ma przynajmniej wybór.
  • Ania.S lubi to




Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych