绕过UIViews的好模式?

时间:2016-09-16 10:28:58

标签: ios cocoa-touch

随着XCode 8,Swift 3和iOS10的最新更新,我用于舍入UIViews的旧模式已经过时了。我以前做的是:

SELECT *
FROM documents this_
  INNER JOIN document_treenodes treenodes14_ ON this_.Id = treenodes14_.fk_document
  INNER JOIN treenodes treenode2_ ON treenodes14_.fk_treenode = treenode2_.Id
  LEFT OUTER JOIN registration_cards regcard1_ ON this_.fk_registration_card = regcard1_.Id
WHERE (
        regcard1_.status IS NULL OR
        (
          NOT (
            regcard1_.status = 3 /* :p0 */)
          AND
          NOT (
            regcard1_.status = 4 /* :p1 */)
        )
      )
      AND
      this_.fk_deleted IS NULL AND
      (
        this_.isdelete IS NULL OR
        this_.isdelete = 0 /* :p2 */)
      AND
      treenode2_.Id = 1235 /* :p3 */ AND
      this_.fk_done IS NULL AND
      (
        regcard1_.status IS NULL OR
        NOT (
          regcard1_.status = 1 /* :p4 */)
      )
   ORDER BY this_.Id DESC
   OFFSET 0 ROWS
   FETCH FIRST 50 /* :p5 */ ROWS ONLY
      treenode2_.Id = 1235 /* :p3 */ AND
      this_.fk_done IS NULL AND
      (
        regcard1_.status IS NULL OR
        NOT (
          regcard1_.status = 1 /* :p4 */)
      )
ORDER BY this_.Id DESC
OFFSET 0 ROWS
FETCH FIRST 50 /* :p5 */ ROWS ONLY

其中setRound被定义为扩展名:

-----------------------------------------------------------------------------------------------------------
| Id  | Operation                  | Name                 | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |                      |   105K|    85M|       | 50518   (1)| 00:00:04 |
|*  1 |  VIEW                      |                      |   105K|    85M|       | 50518   (1)| 00:00:04 |
|*  2 |   WINDOW SORT PUSHED RANK  |                      |   105K|    13M|    14M| 50518   (1)| 00:00:04 |
|*  3 |    HASH JOIN RIGHT OUTER   |                      |   105K|    13M|       | 48503   (1)| 00:00:04 |
|   4 |     INDEX FULL SCAN        | REG_CARD_STATUSES_PK |     4 |    12 |       |     1   (0)| 00:00:01 |
|*  5 |     FILTER                 |                      |       |       |       |            |          |
|*  6 |      HASH JOIN RIGHT OUTER |                      |   105K|    13M|  4048K| 48502   (1)| 00:00:04 |
|   7 |       TABLE ACCESS FULL    | REGISTRATION_CARDS   | 84317 |  3046K|       |   171   (2)| 00:00:01 |
|*  8 |       HASH JOIN            |                      |   183K|    17M|  3936K| 47339   (1)| 00:00:04 |
|*  9 |        INDEX FAST FULL SCAN| DOCUMENT_TREENODE_PK |   183K|  1788K|       |  1872   (2)| 00:00:01 |
|* 10 |        TABLE ACCESS FULL   | DOCUMENTS            |  5064K|   425M|       | 24635   (2)| 00:00:02 |
-----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("from$_subquery$_010"."rowlimit_$$_rownumber"<=0+50 AND 
              "from$_subquery$_010"."rowlimit_$$_rownumber">0)
   2 - filter(ROW_NUMBER() OVER ( ORDER BY INTERNAL_FUNCTION("THIS_"."ID") DESC )<=0+50)
   3 - access("REGCARD1_"."STATUS"="REGCARDSTA11_"."ID"(+))
   5 - filter(("REGCARD1_"."STATUS" IS NULL OR "REGCARD1_"."STATUS"<>3 AND 
              "REGCARD1_"."STATUS"<>4) AND ("REGCARD1_"."STATUS" IS NULL OR "REGCARD1_"."STATUS"<>1))
   6 - access("THIS_"."FK_REGISTRATION_CARD"="REGCARD1_"."ID"(+))
   8 - access("THIS_"."ID"="TREENODES14_"."FK_DOCUMENT")
   9 - filter("TREENODES14_"."FK_TREENODE"=1235)
  10 - filter("THIS_"."FK_DONE" IS NULL AND ("THIS_"."ISDELETE"=0 OR "THIS_"."ISDELETE" IS NULL) 
              AND "THIS_"."FK_DELETED" IS NULL)

现在我不能再使用这种模式了,因为在它们有正确的界限之前就已经设置了出口。因此几乎在所有情况下,bounds.width / 2都大于实际bounds.width并且视图消失。

我非常喜欢这种风格,因为定义了UIView设置的舍入以及所有其他基于图层的样式。

所以现在我问你做四舍五入的方法是什么?你为什么这样做?

1 个答案:

答案 0 :(得分:1)

setRound调用viewDidLayoutSubviews函数或在布局完成后调用。或者你应该从你的width constraint视角出来,并将角半径设置为约束出口constant的一半!