Sempre me surpreende como as coisas que parecem simples são na verdade mais complexas, e é muito fácil esquecer isso.
CGRect é um desses tipos de coisas. Existem dois fatos sobre o CGRect que estou propenso a esquecer:
Largura e Altura não precisam ser positivas, podem ser negativas e todas as funções da Apple que lidam com CGRect tratam corretamente de ambos os casos. (Eu tenho que administrar publicamente: o meu nem sempre se comporta corretamente)
Todos os campos do CGRect são CGFloat, isso significa que se você fizer algumas contas neste campo, pode acabar com valores fracionários.
Falando sobre o segundo caso, se você tentar renderizar uma visualização que tem um valor fracionário em sua propriedade de quadro, você provavelmente terminará com uma renderização de borrão ou pixelização. Isso acontece porque o layout do CocoaTouch normalmente ocorre em limites de pontos inteiros e, se encontrar um valor fracionário, é necessário iniciar o antialiasing.
“Existe uma função para isso” e esta função é chamada CGRectIntegral, como você pode ver no Doc da Apple, esta função arredonda o valor da origem para o valor inteiro mais próximo. Portanto, se você quiser um pouco de matemática no CGRect, deve considerar “limpar” o valor com CGRectIntegral.