Wypełniasz wnętrze prostokąta, ale głaszczesz linię od środka. Ponieważ współrzędne w obu przypadkach (rogi prostokąta oraz współrzędne początku i końca w wierszu) są zdefiniowane jako liczby całkowite (bez ułamków), współrzędne leżą na dokładnych granicach punktów.
Powiedziałem "współrzędne" powyżej, mówiąc o punktach linii, aby nie mylić ich z punktami na ekranie. Powiedziałem też "granice punktowe" zamiast "granice pikseli" z tego samego powodu. iOS definiuje swoje współrzędne i wszystkie punkty w tak zwanych punktach zamiast pikseli. Punkt jest pomiarem niezależnym od rozdzielczości. Zarówno urządzenia siatkówki, jak i inne niż siatkówka mają taką samą liczbę punktów na ekranie, tylko tyle, że odpowiadają różnej liczbie rzeczywistych pikseli. wygląd
Miejmy na głaskanie linię, która leży na granicy punktowych (jak w pytaniu) w porównaniu do napełniania prostokąt gdzie rogi leżą na granicach punkcie:
Na poniższych ilustracjach ja głaskanie linię z czernią i wypełnianiem prostokąta pomarańczowym zarówno na ekranie nie-siatkówkowym, jak i na siatkówce. Podkreślam również linię i prostokąt za pomocą niebieskiego. W obu przypadkach można zobaczyć rozmiar punktu dla tej rozdzielczości i porównać go z rzeczywistą siatką pikseli.
W przypadku nieretinowym można zauważyć, że próba obrysowania linii od środka za pomocą linii 1-punktowej (w tym przypadku odpowiadającej szerokości linii o szerokości 1 piksela) spowoduje wypełnienie połowy pikseli na górze i połowa na pikselach poniżej. Ponieważ piksele są tylko w połowie wypełnione, krycie tych pikseli wynosi 50%. Powoduje to jaśniejszy kolor (na białym tle). Ponieważ zarówno piksele u góry, jak i poniżej są wypełnione stroną, gładząc wypełnienie, oba piksele są u góry i poniżej. Dzięki temu linia wygląda tak, jakby miała szerokość 2 pikseli zamiast jednej.
Możesz szybko porównać to z prostokątem wypełnionym od wewnątrz.
Ten sam przypadek na ekranie siatkówki wygląda inaczej. W takim przypadku rozmiar punktu jest taki sam, ale składa się z 4 pikseli zamiast 1. Tym razem, podczas gładzenia linii, pół punktu powyżej linii i pół punktu poniżej linii spowoduje pełne wypełnienie rzędu pikseli powyżej i poniżej ze względu na ekran o wyższej rozdzielczości. Oznacza to, że linia wygląda tak, jakby miała 1 punkt szerokości i że kolor wygląda na całkowicie nieprzezroczysty.
Widzimy również, że wypełniony prostokąt wygląda tak samo.
Aby rozwiązać ten problem, należy umieścić punkty dla swojej linii na pół pikseli.Gładzenie linii od środka na urządzeniu o niskiej rozdzielczości oznacza, że linia rozciąga się o pół punktu w górę i pół punktu w dół. Ponieważ środek linii znajduje się teraz pośrodku tego punktu, oznacza to, że obrysowana linia w całości leży w pikselach, a linia wygląda ostro. Wykonanie tego nie będzie miało żadnego wpływu na linię siatkówki, ponieważ przesunięcie w dół (lub do góry) o połowę punktu, nadal oznacza, że w pełni wypełnisz piksele powyżej i poniżej.
Na poniższej ilustracji (dla siatkówki) pokazałem zarówno siatkę punktów, jak i siatkę pikseli.