2015-01-11 34 views
5

Aby rozpocząć, ten projekt został zbudowany przy użyciu Swift.Swift Progress Indicator Image Mask

Chcę utworzyć niestandardowy wskaźnik postępu, który "zapełnia się" podczas działania skryptu. Skrypt wywoła strumień danych JSON pobierany ze zdalnego serwera.

Aby lepiej uzmysłowić o co mi po tym, zrobiłem to:

enter image description here

Moje przypuszczenie byłoby mieć dwie PNG; jeden biały i jeden czerwony, a następnie po prostu zrobić maskę na podstawie ilości postępu.

Jakieś przemyślenia na ten temat?

+0

Bardzo ładny rysunek. – matt

Odpowiedz

5

Maskowanie to prawdopodobnie przesada. Wystarczy przerysować obraz za każdym razem. Kiedy to zrobisz, narysujesz czerwony prostokąt, aby wypełnić dolną połowę rysunku, do dowolnej wysokości; następnie narysujesz obraz kropli (PNG), który ma przezroczystość pośrodku, przez co widać czerwony prostokąt. Tak więc jeden PNG wystarczy, ponieważ czerwony prostokąt można narysować "na żywo" za każdym razem, gdy przerysujesz.

lubiłem rysunek tak bardzo, że chciał doprowadzić go do życia, więc tutaj jest mój kod roboczych (mój PNG nazywa tear.png i iv jest UIImageView w moim interfejsie; percent powinny być CGFloat pomiędzy 0 i 1):

func redraw(percent:CGFloat) { 
    let tear : UIImage! = UIImage(named:"tear")! 
    if tear == nil {return} 
    let sz = tear.size 
    let top = sz.height*(1-percent) 
    UIGraphicsBeginImageContextWithOptions(sz, false, 0) 
    let con = UIGraphicsGetCurrentContext() 
    UIColor.redColor().setFill() 
    CGContextFillRect(con, CGRectMake(0,top,sz.width,sz.height)) 
    tear.drawAtPoint(CGPointMake(0,0)) 
    self.iv.image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
} 

ja też podłączyć do UISlider którego sposób działania konwertuje Jego value do CGFloat i nazywa tę metodę tak, że przesuwając suwak iz powrotem przenosi się czerwona wypełnić w górę iw dół w łzy. Mógłbym grać z tym przez wiele godzin!

enter image description here

+0

A oto rozdział mojej książki na temat rysowania, który powiedział mi, jak napisać ten kod: http://www.apeth.com/iOSBook/ch15.html – matt

+0

To jest niesamowite! Co za wspaniała odpowiedź. Dziękuję bardzo za pomoc. Naprawdę to doceniam. Podejście jest tak logiczne! – matcartmill