質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

2324閲覧

UI Sliderのカスタマイズがうまくいかない

hiro_ns

総合スコア12

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2018/10/24 06:13

編集2018/10/25 04:08

#やりたいこと

  • UI Sliderのトラックイメージを変更したい

実装をして見たのですが正常に画像が適用されておらず、対処方法がわからないままです。

環境

  • Swift4

  • Xcode10

  • iOS 11

  • やってみたこと

let vol_btn = UIImage(named:"VOL_BTN")!.ResizeUIImage(width:30, height: 30); let vol_min = UIImage(named:"VOL_ON")!.ResizeUIImage(width:30, height: 30)?.stretchableImage(withLeftCapWidth: 4, topCapHeight: 0); let vol_max = UIImage(named:"VOL_OFF")!.ResizeUIImage(width:30, height: 30)?.stretchableImage(withLeftCapWidth: 4, topCapHeight: 0); // スライダーカスタマイズ volumeSlider.setThumbImage(vol_btn, for: .normal) volumeSlider.setMaximumTrackImage(vol_max, for: .normal) volumeSlider.setMinimumTrackImage(vol_min, for: .normal)

結果

イメージ説明
イメージ説明

10/25追記

UIImage拡張

extension UIImage{ func ResizeUIImage(width : CGFloat, height : CGFloat)-> UIImage!{ let size = CGSize(width: width, height: height) UIGraphicsBeginImageContextWithOptions(size, false, 0.0) self.draw(in: CGRect(x:0, y:0, width:size.width, height:size.height)) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } }

VOL_ONの画像

VOL_ON

##VOL_OFFの画像

VOL_OFF

完成イメージ

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takabosoft

2018/10/25 02:30

ResizeUIImage拡張メソッド(?)や、元の画像の情報が無いと解決方法を提示するのは難しいのだろうと思います。vol_minの方は正しく出ているように見えますので、vol_maxとの違いを探ってみればすぐに解決しそうですが・・・
hiro_ns

2018/10/25 03:46

ご指摘ありがとうございます! 情報を追加いたしました。
yskk

2018/10/25 04:04

正常に表示されない、というのの正常のイメージってどんな感じにしたいのでしょうか
hiro_ns

2018/10/25 04:09

完成イメージを追加しました。最終的にはイメージの通りにしたいのですがmin側がmaxに寄ってしまっています。
fuzzball

2018/10/25 04:17

とりあえず stretchableImage(withLeftCapWidth:topCapHeight:) は遥か昔に deprecated になっているのでので resizableImage(withCapInsets:) を使って下さい。
guest

回答2

0

ベストアンサー

UISliderの問題ではなく、stretchableImage(withLeftCapWidth:topCapHeight:)の使い方を間違えています。

伸縮しない部分を左端からの位置で指定するので、VOL_ONの場合は30 - 4 = 26になります。

swift

1let vol_min = UIImage(named:"VOL_ON")!.ResizeUIImage(width:30, height: 30)?.stretchableImage(withLeftCapWidth: 26, topCapHeight: 0);

追記修正欄にも書きましたが、stretchableImage(withLeftCapWidth:topCapHeight:)はdeprecatedになっているので、resizableImage(withCapInsets:)を使って下さい。

投稿2018/10/25 04:25

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro_ns

2018/10/25 04:27

今まさにresizableImageの引数見て納得しました! 動かした所想定通りの動きになっていました! 助かりましたありがとうございます!!!
guest

0

これらが逆です

Swift

1volumeSlider.setMaximumTrackImage(vol_max, for: .normal) 2volumeSlider.setMinimumTrackImage(vol_min, for: .normal)

vol_maxとvol_minを入れ替えてみてください

投稿2018/10/25 04:34

yskk

総合スコア257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro_ns

2018/10/25 05:22

回答ありがとうございます。 入れ替えて見ましたが丸の向きが変わるだけでした..
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問