Trying to get button to spin in WatchKit

旧城冷巷雨未停 提交于 2019-12-20 06:41:16

问题


the code i'm using works just fine in swift for iPhone apps but not in the WatchKit 7.0 beta. the outlets and actions are different. I'm not sure what needs to change to make it work in WatchKit. please help!

import WatchKit
import Foundation

class InterfaceController: WKInterfaceController {

    @IBOutlet var spinButton: WKInterfaceButton!

    var isRotating = false


    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)

        // Configure interface objects here.
    }

    override func willActivate() {
        // This method is called when watch view controller is about to be visible to user
        super.willActivate()
    }

    override func didDeactivate() {
        // This method is called when watch view controller is no longer visible
        super.didDeactivate()
    }

    @IBAction func spinAction() {

        if !isRotating {
        // create a spin animation
        let spinAnimation = CABasicAnimation()
        // starts from 0
        spinAnimation.fromValue = 0
        // goes to 360 ( 2 * π )
        spinAnimation.toValue = M_PI*2
        // define how long it will take to complete a 360
        spinAnimation.duration = 1
        // make it spin infinitely
        spinAnimation.repeatCount = Float.infinity
        // do not remove when completed
        spinAnimation.removedOnCompletion = false
        // specify the fill mode
        spinAnimation.fillMode = kCAFillModeForwards
        // and the animation acceleration
        spinAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
        // add the animation to the button layer
        spinButton.layer.addAnimation(spinAnimation, forKey: "transform.rotation.z")

    } else {
        // remove the animation
        spinButton.layer.removeAllAnimations()
    }
    // toggle its state
    isRotating = !isRotating

  }

}

回答1:


You are limited to a subset of all the APIs available on iOS when developing for the watchOS.

If you want to do basic animations try out a WKInterfacePicker and change images when the digital crown is moved.

IBOutlet WKInterfacePicker *myPicker;

- (void)willActivate {
    [super willActivate];

    WKPickerItem *item1 = [[WKPickerItem alloc] init];
    item1.contentImage = [WKImage imageWithImageName:@"Unknown.png"];

    WKPickerItem *item2 = [[WKPickerItem alloc] init];
    item2.contentImage = [WKImage imageWithImageName:@"Unknown-2.png"];

    [self.myPicker setItems:array];

}

When the value exceeds the array count start over from index 0.

- (IBAction)myPickerAction:(NSInteger)value {

    if (value % 2 == 0) {
        [self.myPicker setSelectedItemIndex:-1];
    }

}

This will make the WKInterfacePicker change between your images when the digital crown is rotated.



来源:https://stackoverflow.com/questions/31014470/trying-to-get-button-to-spin-in-watchkit

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!