Jak dodać ramkę przerywaną dookoła UIView
.
Coś takiego
ios
objective-c
iphone
uiview
Sohaib
źródło
źródło
Odpowiedzi:
Możesz ustawić obramowanie za pomocą tego wzoru, używając ścieżki Warstwy i Beziera, jak na poniższych przykładach.
Cel C
Swift 3.1
Możesz także ustawić różne typy projektów za pomocą obrazu wzoru, jak na poniższym przykładzie.
Tutaj musisz dodać
<QuartzCore/QuartzCore>
framework do projektu i zaimportować go z poniższą linią wYourViewController.m
pliku.źródło
Inna metoda, jeśli lubisz podwarstwy. W init widoku niestandardowego umieść to (_border to ivar):
W podglądzie układów umieść to:
źródło
_border.path = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:5.f].CGPath;
_border.lineWidth = 3
border = CAShapeLayer() border.strokeColor = yourColor border.fillColor = nil border.lineDashPattern = [4, 2] self.layer.addSublayer(border)
Dla tych z Was, którzy pracują w Swift, to rozszerzenie klasy w UIView ułatwia to. Było to oparte na odpowiedzi sunshineDev.
Aby z niego skorzystać:
źródło
addDashedBorder()
podczasdidMoveToSuperview()
myślenia autoLayout byłaby kompletna wtedy i rozmiar ramki byłoby poprawne, ale tak nie było. Szerokość przerywanej granicy wykracza poza szerokość widoku. Nawiasem mówiąc, przerywana linia wygląda tak dobrze! Nieself.frame.size
jest poprawne.Swift 3 :
Użyj w scenorysie (jako klasa niestandardowa) lub bezpośrednio w kodzie:
Wynik:
źródło
Opierając się na tym, co zasugerował Prasad G, stworzyłem metodę wewnątrz klasy UIImage Extras z następującymi elementami:
Ważne jest, aby zaznaczyć, że jeśli określisz pozycję swojego kształtu jako (0,0), dolny róg obramowania zostanie umieszczony na środku obrazu, dlatego ustawiłem go na: (frameSize.width / 2, frameSize .height / 2)
Następnie używam mojej metody, aby uzyskać przerywaną ramkę za pomocą UIImage mojego UIImageView i dodaję CAShapeLayer jako podwarstwę warstwy UIImageView:
źródło
Użyj metody CGContextSetLineDash ().
Myślę, że to ci pomoże.
źródło
Oto podklasa UIView, która może działać w każdym projekcie, działa również w przypadku widoków okrągłych :
W ten sposób możesz edytować z Storyboard w następujący sposób:
Para wyników:
źródło
W tym celu musisz dodać CAShapeLayer dla tego konkretnego obiektu
źródło
Swift 4.2
Oparty na odpowiedzi rmooney jako
UIView
rozszerzeniu z konfigurowalnymi parametrami, które mają ustawione wartości domyślne.źródło
shapeLayer.lineJoin = CAShapeLayerLineJoin.round
powinno byćyourViewBorder.lineJoin = kCALineJoinRound
Szybka wersja odpowiedzi QuartzCore.
To
CAShapeLayer
podejście działa, ale podejście QuartzCore jest lepsze w obsłudze ponownego ładowania widoku tabeli, jeśliUIView
znajduje się wewnątrz komórki.Do obrazu możesz użyć czegoś takiego (jest naprawdę mały):
Zwykle wolę wektor niż PNG, kiedy mogę sobie z tym poradzić:
Images.xcassets
utwórzNew Image Set
nazwany kropkowany wzórScale Factors
naSingle Vector
źródło
W przypadku obramowania przerywanego / kropkowanego platformy Xamarin.iOS.
źródło
W Swift 3
źródło
Tak jest, jeśli chcesz tego w Swift 2
źródło
wypróbuj poniższy kod
dla kogoś takiego jak poniżej
źródło
Dla Swift 5
Jak dodać
Jak ponownie usunąć obramowanie
źródło
Skończyło się na stworzeniu IB Designable przy użyciu niektórych implementacji @Chris:
CurvedDashedBorderUIVIew.h:
CurvedDashedBorderUIVIew.m:
następnie po prostu skonfiguruj go w xib / storyboard:
źródło
Szybkie rozwiązanie z niestandardową klasą działające z automatycznym układem
dostosowane od @Iain Smith
źródło
Możesz po prostu utworzyć klasę IBDesignable w następujący sposób:
Następnie po prostu podklasuj swój widok za pomocą BorderedView z Xcode. W ten sposób możesz bardzo łatwo ustawić kolor i szerokość obramowania z poziomu kreatora interfejsu!
źródło
} i wywołaj tę funkcję w viewdidLoad () z opóźnieniem:
źródło
• Swift 5
• Działa z autoukładem
• Działa z promieniem naroża
źródło
W swift 4 stworzyłem rozszerzenie UIView z następującą funkcją:
źródło
Jeśli chcesz, aby to działało z cornerRadius, spróbuj tego
źródło
Swift 5+
Jak używać:
źródło