Interface Builder 上で maskedCorners を設定

## 背景

iOS11 より、 View の四隅を丸める際に `maskedCorners` を指定することで、一部だけに `cornerRadius` を設定することが可能となりました。

https://qiita.com/hachinobu/items/dc2ff32fa2be6b78ea86

コード上での設定するとなると

``` swift
view.layer.cornerRadius = 16
view.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXminYCorner]
```

となるのですが、レイアウトを Interface Builder で組んでいる場合、このためだけにコード側で処理するのは面倒なため、 Interface Builder 上で `maskedCorners` の設定が完結することを目指します。

## 設定方法

Interface Builder 上の _User Defined Runtime Attributes_ にて、 `layer.maskedCorners` の Key Path に対して、 15 までの Number を設定することで対応が可能となります。

|IB 上の設定|表示|
|:-:|:-:|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/62306e64-b371-85de-401d-04d774d197de.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/4415fad9-656c-dac1-715b-5a46bd2c0203.png)|

`maskedCorners` の型である [CACornerMask](https://developer.apple.com/documentation/quartzcore/cacornermask) は `protocol OptionSet` に準拠することによって、複数のフラグ設定を `UInt` のビットフラグ表現で保持できるような実装となっています。

https://qiita.com/takehito-koshimizu/items/65776bcd257dafbe854d

ビットフラグとしては、

- `layerMinXMinYCorner` (左上)
- `layerMaxXMinYCorner` (右上)
- `layerMinXMaxYCorner` (左下)
- `layerMaxXMaxYCorner` (右下)

の4つを取るため、 $0 〜 (2^4 - 1)$ の値によって、 `maskedCorners: CACornerMask` を表現できます。

## 早見表

以下に `maskedCorners: CACornerMask` に数値を設定する場合の対応をまとめました。

|値|右下<br>`MaxXMaxY`|左下<br>`MinXMaxY`|右上<br>`MaxXMinY`|左上<br>`MinXMinY`|表示|
|:-:|:-:|:-:|:-:|:-:|:-:|
|0|−|−|−|−|![00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/8bc45d46-7951-b901-409d-0854a16856bd.png)|
|1|−|−|−|:o:|![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/6b34bf62-4834-4d7e-1504-7b367fdb0b24.png)|
|2|−|−|:o:|−|![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/e5cb5d01-8fa8-02ef-70aa-b44f8fdcb007.png)|
|3|−|−|:o:|:o:|![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/baef27e0-3f12-a9f3-4884-6076e6033479.png)|
|4|−|:o:|−|−|![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/825dd654-dd1c-dc85-8709-695f92a45954.png)|
|5|−|:o:|−|:o:|![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/620b4b86-3f56-c2f6-28b9-1036f9147112.png)|
|6|−|:o:|:o:|−|![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/38526bb1-b0cb-741c-f546-7ddf94de03e2.png)|
|7|−|:o:|:o:|:o:|![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/d95aa01f-d4c2-09ba-fd32-07d87d76d0bf.png)|
|8|:o:|−|−|−|![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/f0778a62-59d1-cb83-f50f-45be7addb773.png)|
|9|:o:|−|−|:o:|![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/d78bb46f-9820-cbb7-1c05-58ef038294fa.png)|
|10|:o:|−|:o:|−|![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/d26c1d80-ae58-f5d2-7c4e-bf77e6e32e0f.png)|
|11|:o:|−|:o:|:o:|![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/b3bffcba-baa8-4821-4f32-9b4fbd711f32.png)|
|12|:o:|:o:|−|−|![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/f4b526a6-f614-7fe3-42e3-6e96a2922f8c.png)|
|13|:o:|:o:|−|:o:|![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/62ac1772-b536-09f5-cfd8-0b58a36e85d9.png)|
|14|:o:|:o:|:o:|−|![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/27d80e78-30c2-8730-ed34-f02afeeb9d6c.png)|
|15|:o:|:o:|:o:|:o:|![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178830/fb824bd5-009b-82fc-6053-d1ba9f8f0cfd.png)|