質問するログイン新規登録

質問編集履歴

4

修正

2018/03/13 08:35

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -2,31 +2,9 @@
2
2
 
3
3
  StroyBoardで設置したUIButtonに、コード上でグラデーションレイヤーを設定し、
4
4
  設定したレイヤーをとりのぞいてボタンを初期状態に戻したいのですが、どのようにすればよいでしょうか?
5
- ```swift
6
- //グラデーションレイヤーをボタンに配置
7
- XXXButton.layer.insertSublayer(gradientLayer, at: 0)
8
- ```
9
5
 
10
- ↓のようにやてみたらボタンがまるごと消えました
11
-
12
6
  ```swift
13
- XXXButton.layer.removeFromSuperlayer()
14
- ```
15
7
 
16
- インデックスを指定していして特定レイヤーだけを削除することはできるのでしょうか?
17
- それとも他の方法がよいのでしょうか?
18
-
19
- ↓こちらの方法が正解っぽいらしいが、
20
- ボタンの文字列が消える。レイヤー番号か名称の指定方法がわからない。
21
- ```swift
22
- XXXButton.layer.sublayers = nil
23
- ```
24
-
25
- 回答ありがとうございます。
26
- 質問が雑だと思うので、詳しく追記します。
27
-
28
- ```swift
29
-
30
8
  ↓これでグラデーションを追加
31
9
 
32
10
  // ボタン背景にグラデーションを変更する関数
@@ -56,12 +34,76 @@
56
34
  }
57
35
 
58
36
  ```
59
- グラデ追加ボタンタップでグラデ追加可能
60
-
61
- グラデ解除ボタンタップでデフォルトグラデーション・設定したグラデーション・ボタンタイトルが消える
62
-
63
- グラデ追加ボタンタップでランタイムエラー
64
37
 
65
- 2018-03-13 16:20:58.935062 testPG[6188:3707982] -[_TtGCs23_ContiguousArrayStorageP__ isHidden]: unrecognized selector sent to instance 0x16018030
66
- 2018-03-13 16:20:58.936064 testPG[6188:3707982] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_TtGCs23_ContiguousArrayStorageP__ isHidden]: unrecognized selector sent to instance 0x16018030'
67
- *** First throw call stack:
38
+ ↓下記を実行した際のプリントログ
39
+
40
+ ```swift
41
+
42
+ // ボタン背景のグラデーションを取り除く関数
43
+ func changeDefaultButtonBackground (Button: UIButton) {
44
+ //Button.layer.sublayers?.remove(at: 0)
45
+ if let layer = Button.layer.sublayers?.first {
46
+ print("Button.layer.sublayers:",Button.layer.sublayers)
47
+ layer.removeFromSuperlayer()
48
+ }
49
+ }
50
+ ```
51
+
52
+
53
+ Button.layer.sublayers:
54
+
55
+ Optional([<CAGradientLayer:0x168666f0; position = CGPoint (31.75 13.5);
56
+ bounds = CGRect (0 0; 63.5 27); allowsGroupOpacity = YES; zPosition = -100;
57
+ cornerRadius = 1; colors = (
58
+ "<CGColor 0x155c9e90> [<CGColorSpace 0x1565cdb0> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1; extended range)] ( 0.121569 0.129412 0.141176 1 )",
59
+ "<CGColor 0x15591600> [<CGColorSpace 0x15560350> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile; extended range)] ( 0.407819 1 )")>,
60
+
61
+ <CAGradientLayer:0x156755f0; position = CGPoint (31.75 13.25); bounds = CGRect (0 0; 63.5 26.5); allowsGroupOpacity = YES; colors = (
62
+ "<CGColor 0x156f9400> [<CGColorSpace 0x1565cdb0> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1; extended range)] ( 0.666667 0.666667 0.666667 1 )",
63
+ "<CGColor 0x15665b00> [<CGColorSpace 0x1565cdb0> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1; extended range)] ( 0.407843 0.407843 0.407843 1 )")>,
64
+
65
+ <CALayer:0x1683fd20; position = CGPoint (0 0); bounds = CGRect (0 0; 0 0); delegate = <UIImageView: 0x155294f0; frame = (0 0; 0 0);
66
+ clipsToBounds = YES; alpha = 0.2; hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1683fd20>>; hidden = YES; masksToBounds = YES; allowsGroupOpacity = YES; opacity = 0.2>,
67
+
68
+ <_UILabelLayer:0x155aa940; position = CGPoint (31.75 13.75); bounds = CGRect (0 0; 51.5 11.5); delegate = <UIButtonLabel: 0x155a0ee0; frame = (6 8; 51.5 11.5); text = 'CLIPLINES'; alpha = 0.2; opaque = NO;
69
+ userInteractionEnabled = NO;
70
+
71
+ layer = <_UILabelLayer: 0x155aa940>>; contents = <CABackingStore 0x15789090 (buffer [123 23] BGRA8888)>; allowsGroupOpacity = YES; opacity = 0.2; contentsMultiplyColor = (null); rasterizationScale = 2; contentsScale = 2>,
72
+
73
+ <CALayer:0x1683d990; position = CGPoint (59.5 22.5);bounds = CGRect (0 0; 2 2); delegate = <UIView: 0x155295f0; frame = (58.5 21.5; 2 2); layer = <CALayer: 0x1683d990>>; allowsGroupOpacity = YES;
74
+ backgroundColor = <CGColor 0x156af0f0> [<CGColorSpace 0x15560350> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile; extended range)] ( 1 1 )>,
75
+
76
+ <CALayer:0x16840460; position = CGPoint (59.5 22.5); bounds = CGRect (0 0; 2 2); delegate = <UIView: 0x155296d0; frame = (58.5 21.5; 2 2);
77
+ layer = <CALayer: 0x16840460>>;
78
+ allowsGroupOpacity = YES;
79
+ backgroundColor = <CGColor 0x156af0f0> [<CGColorSpace 0x15560350> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile; extended range)] ( 1 1 )>,
80
+
81
+ <CALayer:0x1552d0b0; position = CGPoint (59.5 22.5); bounds = CGRect (0 0; 2 2); delegate = <UIView: 0x1552cfd0; frame = (58.5 21.5; 2 2); layer = <CALayer: 0x1552d0b0>>; allowsGroupOpacity = YES;
82
+ backgroundColor = <CGColor 0x156af0f0> [<CGColorSpace 0x15560350> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile; extended range)] ( 1 1 )>,
83
+
84
+ <CALayer:0x1561e380; position = CGPoint (59.5 22.5); bounds = CGRect (0 0; 2 2); delegate = <UIView: 0x15651c50; frame = (58.5 21.5; 2 2); layer = <CALayer: 0x1561e380>>;
85
+ allowsGroupOpacity = YES; backgroundColor = <CGColor 0x156af0f0> [<CGColorSpace 0x15560350> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile; extended range)] ( 1 1 )>,
86
+
87
+ <CALayer:0x156662e0; position = CGPoint (59.5 22.5);bounds = CGRect (0 0; 2 2);delegate = <UIView: 0x15666200;frame = (58.5 21.5; 2 2);
88
+ layer = <CALayer: 0x156662e0>>; allowsGroupOpacity = YES;
89
+ backgroundColor = <CGColor 0x156af0f0> [<CGColorSpace 0x15560350> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile; extended range)] ( 1 1 )>,
90
+
91
+ <CALayer:0x157da490; position = CGPoint (59.5 23); bounds = CGRect (0 0; 2 2); delegate = <UIView: 0x157da3b0; frame = (58.5 22; 2 2);
92
+ layer = <CALayer: 0x157da490>>; allowsGroupOpacity = YES;
93
+ backgroundColor = <CGColor 0x156af0f0> [<CGColorSpace 0x15560350> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile; extended range)] ( 1 1 )>,
94
+
95
+ <CALayer:0x157daa10; position = CGPoint (59.5 23); bounds = CGRect (0 0; 2 2); delegate = <UIView: 0x157da930; frame = (58.5 22; 2 2);
96
+ layer = <CALayer: 0x157daa10>>; allowsGroupOpacity = YES;
97
+ backgroundColor = <CGColor 0x156af0f0> [<CGColorSpace 0x15560350> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile; extended range)] ( 1 1 )>,
98
+
99
+ <CALayer:0x1564b150; position = CGPoint (59.5 23); bounds = CGRect (0 0; 2 2); delegate = <UIView: 0x1565fc20; frame = (58.5 22; 2 2);
100
+ layer = <CALayer: 0x1564b150>>; allowsGroupOpacity = YES;
101
+ backgroundColor = <CGColor 0x156af0f0> [<CGColorSpace 0x15560350> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile; extended range)] ( 1 1 )>,
102
+
103
+ <CALayer:0x16868830; position = CGPoint (59.5 23); bounds = CGRect (0 0; 2 2); delegate = <UIView: 0x15531c30; frame = (58.5 22; 2 2);
104
+ layer = <CALayer: 0x16868830>>; allowsGroupOpacity = YES;
105
+ backgroundColor = <CGColor 0x156af0f0> [<CGColorSpace 0x15560350> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile; extended range)] ( 1 1 )>,
106
+
107
+ <CALayer:0x15547290; position = CGPoint (59.5 23); bounds = CGRect (0 0; 2 2); delegate = <UIView: 0x155471b0; frame = (58.5 22; 2 2);
108
+ layer = <CALayer: 0x15547290>>; allowsGroupOpacity = YES;
109
+ backgroundColor = <CGColor 0x156af0f0> [<CGColorSpace 0x15560350> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile; extended range)] ( 1 1 )>])

3

追記

2018/03/13 08:35

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -20,4 +20,48 @@
20
20
  ボタンの文字列が消える。レイヤー番号か名称の指定方法がわからない。
21
21
  ```swift
22
22
  XXXButton.layer.sublayers = nil
23
- ```
23
+ ```
24
+
25
+ 回答ありがとうございます。
26
+ 質問が雑だと思うので、詳しく追記します。
27
+
28
+ ```swift
29
+
30
+ ↓これでグラデーションを追加
31
+
32
+ // ボタン背景にグラデーションを変更する関数
33
+ func changeSelectedButtonBackground (Button: UIButton) {
34
+ // 選択されたボタンのグラデーション色を設定する
35
+ let topColor = UIColor.hex(hexStr: "AAAAAA", alpha: 1.0)
36
+ let bottomColor = UIColor.hex(hexStr: "686868", alpha: 1.0)
37
+ //グラデーションの色を配列で管理
38
+ let gradientColors: [CGColor] = [topColor.cgColor, bottomColor.cgColor]
39
+ //グラデーションレイヤーを作成
40
+ let gradientLayer: CAGradientLayer = CAGradientLayer()
41
+ //グラデーションの色をレイヤーに割り当てる
42
+ gradientLayer.colors = gradientColors
43
+ //グラデーションレイヤーを対象ボタンのサイズにする
44
+ gradientLayer.frame = Button.bounds
45
+ //グラデーションレイヤーを配置 index(0)に追加しているので、index指定で削除できたら今後自由度高くなるから嬉しい
46
+ Button.layer.insertSublayer(gradientLayer, at: 0)
47
+ }
48
+
49
+
50
+ ↓この関数で特定ボタンのグラデーションを解除したいが、StoryBoardでも背景にグラデーションを掛けてるのでそれもきえてるのかな?
51
+
52
+
53
+ // ボタン背景のグラデーションを取り除く関数
54
+ func removeGradientFromButtonBackground (Button: UIButton) {
55
+ Button.layer.sublayers = nil
56
+ }
57
+
58
+ ```
59
+ グラデ追加ボタンタップでグラデ追加可能
60
+
61
+ グラデ解除ボタンタップでデフォルトグラデーション・設定したグラデーション・ボタンタイトルが消える
62
+
63
+ グラデ追加ボタンタップでランタイムエラー
64
+
65
+ 2018-03-13 16:20:58.935062 testPG[6188:3707982] -[_TtGCs23_ContiguousArrayStorageP__ isHidden]: unrecognized selector sent to instance 0x16018030
66
+ 2018-03-13 16:20:58.936064 testPG[6188:3707982] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_TtGCs23_ContiguousArrayStorageP__ isHidden]: unrecognized selector sent to instance 0x16018030'
67
+ *** First throw call stack:

2

誤記修正

2018/03/13 07:32

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -19,5 +19,5 @@
19
19
  ↓こちらの方法が正解っぽいらしいが、
20
20
  ボタンの文字列が消える。レイヤー番号か名称の指定方法がわからない。
21
21
  ```swift
22
- Button.layer.sublayers = nil
22
+ XXXButton.layer.sublayers = nil
23
23
  ```

1

変更

2018/03/13 07:02

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -14,4 +14,10 @@
14
14
  ```
15
15
 
16
16
  インデックスを指定していして特定レイヤーだけを削除することはできるのでしょうか?
17
- それとも他の方法がよいのでしょうか?
17
+ それとも他の方法がよいのでしょうか?
18
+
19
+ ↓こちらの方法が正解っぽいらしいが、
20
+ ボタンの文字列が消える。レイヤー番号か名称の指定方法がわからない。
21
+ ```swift
22
+ Button.layer.sublayers = nil
23
+ ```