簡體   English   中英

NSSlider自定義旋鈕圖像

[英]NSSlider custom knob image

我嘗試在互聯網上搜索一些好的技巧,以便為NSSlider的旋鈕繪制具有不同大小的自定義圖像。

我希望這次我們可以將想法集中在一個地方。

大多數人遇到的問題是,他們想要一個不同的旋鈕,有時是一個更大的旋鈕,除非您超出我能讀懂的sizetofit的范圍,否則無法使用。

我本人沒有解決方案,也一直在尋找相同的東西。

我的問題(以及整個問題)是,我的旋鈕圖像為22x30px。

我有一個子類NSSliderCell,其中drawKnob:方法是:

- (void)drawKnob:(NSRect)knobRect {

NSImage *image = [NSImage imageNamed:@"sliderImage"];

[[NSColor colorWithPatternImage:image] set];
NSRectFill(knobRect);
}

這用我的圖像填充了舊旋鈕。 然后將RectFill更改為:

NSRectFill(NSMakeRect(knobRect.origin.x,knobRect.origin.y,25,35));

25/35只是為了獲得更大的價值。

但是大小不會改變寬度(在我的情況下是垂直滑塊),並且圖像不是從真實的角開始。 它位於旋鈕的中間,左側的一部分被切掉了,而右側則變得糊塗了。

初始化NSSlider時,框架足夠大以適合圖像,但不會顯示為探針。

我嘗試了一個NSSlider子集,在其中使用了-(void)sizeToFit {},但我真的不知道該在其中設置什么。

我希望我們可以在此處發布NSSlider的一個示例代碼,其中每個人都可以使用自定義旋鈕圖像,而不必在2-3個小時內用Google搜索。

我敢肯定有人用自定義圖片制作了Slider

謝謝

在NSSliderCell子類中,您還需要重寫knobRectFlipped: 這是我的一些代碼,其中mNormalKnob是一個加載到initWithCoder:的成員變量中的NSImage

- (NSRect)knobRectFlipped:(BOOL)flipped
{
    NSSlider* theSlider = (NSSlider*) [self controlView];
    NSRect myBounds = [theSlider bounds];
    NSSize knobSize = [mNormalKnob size];
    float travelLength = myBounds.size.width - knobSize.width;
    double valueFrac = ([theSlider doubleValue] - [theSlider minValue]) /
        ([theSlider maxValue] - [theSlider minValue]);
    float knobLeft = roundf( valueFrac * travelLength );
    float knobMinY = roundf( myBounds.origin.y +
        0.5f * (myBounds.size.height - knobSize.height) );
    NSRect knobRect = NSMakeRect( knobLeft, knobMinY,
        knobSize.width, knobSize.height );
    return knobRect;
}

我想我假設旋鈕圖像的高度不超過視框的高度。

這是另一種不考慮視框高度的方法,盡管我沒有嘗試過。 將滑塊及其超級視圖指定為具有Core Animation層。 將CALayer作為子類的成員變量,並將其內容設置為旋鈕圖像。 然后,當需要繪制旋鈕時,只需調整旋鈕層的位置即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM