PlayPauseButton | Animated Play & Pause Button | iOS library

 by   KelvinJin Swift Version: Current License: MIT

kandi X-RAY | PlayPauseButton Summary

kandi X-RAY | PlayPauseButton Summary

PlayPauseButton is a Swift library typically used in Mobile, iOS applications. PlayPauseButton has no bugs, it has no vulnerabilities, it has a Permissive License and it has low support. You can download it from GitHub.

Animated Play & Pause Button, subclass of UIButton written in Swift. .
Support
    Quality
      Security
        License
          Reuse

            kandi-support Support

              PlayPauseButton has a low active ecosystem.
              It has 28 star(s) with 6 fork(s). There are 2 watchers for this library.
              OutlinedDot
              It had no major release in the last 6 months.
              PlayPauseButton has no issues reported. There are no pull requests.
              It has a neutral sentiment in the developer community.
              The latest version of PlayPauseButton is current.

            kandi-Quality Quality

              PlayPauseButton has 0 bugs and 0 code smells.

            kandi-Security Security

              PlayPauseButton has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
              PlayPauseButton code analysis shows 0 unresolved vulnerabilities.
              There are 0 security hotspots that need review.

            kandi-License License

              PlayPauseButton is licensed under the MIT License. This license is Permissive.
              Permissive licenses have the least restrictions, and you can use them in most projects.

            kandi-Reuse Reuse

              PlayPauseButton releases are not available. You will need to build from source code and install.
              Installation instructions are not available. Examples and code snippets are available.

            Top functions reviewed by kandi - BETA

            kandi's functional review helps you automatically verify the functionalities of the libraries and avoid rework.
            Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of PlayPauseButton
            Get all kandi verified functions for this library.

            PlayPauseButton Key Features

            No Key Features are available at this moment for PlayPauseButton.

            PlayPauseButton Examples and Code Snippets

            No Code Snippets are available at this moment for PlayPauseButton.

            Community Discussions

            QUESTION

            2 Audio Players Independently from each other
            Asked 2021-Aug-31 at 14:45

            I'm trying to adapt someone's code from codepen.io that made this pretty visual audio player playlist. My goal I want to achieve is to have multiple of these on a single page since the original code only supported one. I'm trying to figure out how to get these audio players to behave on their own accord rather than, when I press play on one it will pause the previous or vice versa. At the moment, the problem is that they're all sharing the same audio controls and I'm trying to figure out a way to target each audio player uniquely.

            Been trying at this for a couple days so I'm reaching out for help. My initial thought which you'll see in the codepen.io below was to wrap each div of the audio player in its own unique div. Then in JS, call an array of the divs and with forEach iterate the JS function for the audio playlist on each div. I know there is something wrong with my functions or perhaps my approach in general and I would love to have some feedback and direction.

            Currently, I have just two audio players to start with so I can even see if my idea is working. Right now their both accessing the same songs/album covers, however I just wanted to figure out how to get them to play differently first before figuring out the rest of the stuff haha. So apologies if you notice that problem too.

            2 Audio Players Independently -- Codepen.io

            Lastly, I'm implementing this with some AHK scripts & Edge/IE, so I'm forced for the time being to use Legacy JS.

            Thank you. Cheers!

            Here is the code for the JS in case you don't want to visit codepen.io.

            ...

            ANSWER

            Answered 2021-Aug-31 at 14:45

            Alright, I've figured out why the players won't play independently, and it seems to be related to some type of JS scoping issue, and how the audio variable was being assigned in the init function. I'm still not exactly sure why, but it seems as every audio player created was referencing the same exact audio instance.

            If you change two things, then it should work for you.

            First, at the very beginning of the immediately invoked function expression, declare an audio variable, set to nothing.

            Source https://stackoverflow.com/questions/68972973

            QUESTION

            Testcafe how to declare ClientFunction in Factory page
            Asked 2021-May-19 at 11:02

            I am trying to declare a ClientFunction on a Factory page and then call it on a test page. But I am doing something wrong and it doesn’t work. I have two pages one is factory page, second test page. In test page i have ClientFunction and it works fine. When i trying move to Factory Page it doesn't working.

            ...

            ANSWER

            Answered 2021-May-19 at 11:02

            QUESTION

            onCompeletionListener() not called every time and shuffle and repeat not working well
            Asked 2021-Feb-28 at 05:38
            public class SongPlayerActivity extends AppCompatActivity implements MediaPlayer.OnCompletionListener {
            static MediaPlayer mediaPlayer;
            TextView songName, artistName, albumName, durationPlayed, totalDuration;
            ImageView next, previous, songImage, shuffle, repeat;
            SharedPreferences sharedPreferences;
            SharedPreferences.Editor editor;
            SeekBar seekBar;
            FloatingActionButton floatingActionButton;
            List songList = new ArrayList<>();
            Handler handler = new Handler();
            Thread playPauseThread, nextThread, previousThread;
            private Uri uri;
            private int position;
            boolean shuffleBoolean, repeatBoolean;
            
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_song_player);
            
                sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
            
                songList = getIntent().getParcelableArrayListExtra("songsList");
                position = getIntent().getIntExtra("position", 0);
            
                songImage = findViewById(R.id.album_cover);
                songName = findViewById(R.id.music_name);
                albumName = findViewById(R.id.album_name);
                artistName = findViewById(R.id.artist_name);
                seekBar = findViewById(R.id.seek_bar);
                durationPlayed = findViewById(R.id.played_duration);
                totalDuration = findViewById(R.id.music_duration);
                repeat = findViewById(R.id.repeat);
                shuffle = findViewById(R.id.shuffle);
                floatingActionButton = findViewById(R.id.play_pause);
                next = findViewById(R.id.next);
                previous = findViewById(R.id.previous);
                playMusic();
            
                mediaPlayer.setOnCompletionListener(this);
            
                seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                    @Override
                    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                        if (mediaPlayer != null && fromUser) {
                            mediaPlayer.seekTo(progress * 1000);
                        }
                    }
            
                    @Override
                    public void onStartTrackingTouch(SeekBar seekBar) {
            
                    }
            
                    @Override
                    public void onStopTrackingTouch(SeekBar seekBar) {
            
                    }
                });
                SongPlayerActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (mediaPlayer != null) {
                            int currentPosition = mediaPlayer.getCurrentPosition() / 1000;
                            seekBar.setProgress(currentPosition);
                            durationPlayed.setText(durationConversion(currentPosition));
                        }
                        handler.postDelayed(this, 200);
                    }
                });
            
                if (sharedPreferences.getBoolean("playerShuffle", false)) {
                    shuffle.setImageResource(R.drawable.ic_baseline_shuffle_24);
                    shuffleBoolean = true;
                }
                else {
                    shuffle.setImageResource(R.drawable.ic_baseline_shuffle_off_24);
                    shuffleBoolean = false;
                }
                if (sharedPreferences.getBoolean("playerRepeat", false)) {
                    repeat.setImageResource(R.drawable.ic_baseline_repeat_24);
                    repeatBoolean = true;
                }
                else {
                    repeat.setImageResource(R.drawable.ic_baseline_repeat_24_off);
                    repeatBoolean = false;
                }
            
                shuffle.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (sharedPreferences.getBoolean("playerShuffle", false)) {
                            editor = sharedPreferences.edit();
                            editor.putBoolean("playerShuffle", false);
                            editor.commit();
                            shuffleBoolean = false;
                            shuffle.setImageResource(R.drawable.ic_baseline_shuffle_off_24);
                            Toast.makeText(getApplicationContext(), R.string.shuffle_off, Toast.LENGTH_SHORT).show();
                        } else {
                            editor = sharedPreferences.edit();
                            editor.putBoolean("playerShuffle", true);
                            editor.commit();
                            shuffleBoolean = true;
                            shuffle.setImageResource(R.drawable.ic_baseline_shuffle_24);
                            Toast.makeText(getApplicationContext(), R.string.shuffle_on, Toast.LENGTH_SHORT).show();
                        }
                    }
                });
                repeat.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (sharedPreferences.getBoolean("playerRepeat", false)) {
                            editor = sharedPreferences.edit();
                            editor.putBoolean("playerRepeat", false);
                            editor.commit();
                            repeatBoolean = false;
                            repeat.setImageResource(R.drawable.ic_baseline_repeat_24_off);
                            Toast.makeText(getApplicationContext(), R.string.repeat_off, Toast.LENGTH_LONG).show();
                        } else {
                            editor = sharedPreferences.edit();
                            editor.putBoolean("playerRepeat", true);
                            editor.commit();
                            repeatBoolean = true;
                            repeat.setImageResource(R.drawable.ic_baseline_repeat_24);
                            Toast.makeText(getApplicationContext(), R.string.repeat_on, Toast.LENGTH_LONG).show();
                        }
                    }
                });
            }
            
            public String durationConversion(int songDuration) {
                long s = songDuration % 60;
                long m = (songDuration / 60) % 60;
                long h = (songDuration / (60 * 60)) % 24;
                return String.format("%02d:%02d:%02d", h, m, s);
            }
            
            void playPauseButton() {
                playPauseThread = new Thread() {
                    @Override
                    public void run() {
                        super.run();
                        floatingActionButton.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if (mediaPlayer.isPlaying()) {
                                    mediaPlayer.pause();
                                    floatingActionButton.setImageResource(R.drawable.ic_baseline_play_arrow_24);
                                    seekBar.setMax(mediaPlayer.getDuration() / 1000);
                                    SongPlayerActivity.this.runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {
                                            if (mediaPlayer != null) {
                                                int currentPosition = mediaPlayer.getCurrentPosition() / 1000;
                                                seekBar.setProgress(currentPosition);
                                            }
                                            handler.postDelayed(this, 200);
                                        }
                                    });
                                } else {
                                    mediaPlayer.start();
                                    floatingActionButton.setImageResource(R.drawable.ic_baseline_pause_24);
                                    seekBar.setMax(mediaPlayer.getDuration() / 1000);
                                    SongPlayerActivity.this.runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {
                                            if (mediaPlayer != null) {
                                                int currentPosition = mediaPlayer.getCurrentPosition() / 1000;
                                                seekBar.setProgress(currentPosition);
                                            }
                                            handler.postDelayed(this, 200);
                                        }
                                    });
                                }
                            }
                        });
                        mediaPlayer.setOnCompletionListener(SongPlayerActivity.this);
                    }
                };
                playPauseThread.start();
            }
            
            private void nextButton() {
                nextThread = new Thread() {
                    @Override
                    public void run() {
                        super.run();
                        next.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if (mediaPlayer.isPlaying()) {
                                    mediaPlayer.stop();
                                    mediaPlayer.release();
                                    if(shuffleBoolean && !repeatBoolean)
                                        position = random(songList.size()-1);
                                    else if (!shuffleBoolean && !repeatBoolean)
                                        position++;
                                    if (position == songList.size())
                                        position = 0;
                                    mediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.parse(songList.get(position).path));
                                    metaDataRetriever(Uri.parse(songList.get(position).path));
                                    seekBar.setMax(mediaPlayer.getDuration() / 1000);
                                    SongPlayerActivity.this.runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {
                                            if (mediaPlayer != null) {
                                                int currentPosition = mediaPlayer.getCurrentPosition() / 1000;
                                                seekBar.setProgress(currentPosition);
                                            }
                                            handler.postDelayed(this, 200);
                                        }
                                    });
                                    floatingActionButton.setImageResource(R.drawable.ic_baseline_pause_24);
                                    mediaPlayer.setOnCompletionListener(SongPlayerActivity.this);
                                } else {
                                    mediaPlayer.stop();
                                    mediaPlayer.release();
                                    if(shuffleBoolean && !repeatBoolean)
                                        position = random(songList.size()-1);
                                    else if (!shuffleBoolean && !repeatBoolean)
                                        position++;
                                    if (position == songList.size())
                                        position = 0;
                                    mediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.parse(songList.get(position).path));
                                    metaDataRetriever(Uri.parse(songList.get(position).path));
                                    seekBar.setMax(mediaPlayer.getDuration() / 1000);
                                    SongPlayerActivity.this.runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {
                                            if (mediaPlayer != null) {
                                                int currentPosition = mediaPlayer.getCurrentPosition() / 1000;
                                                seekBar.setProgress(currentPosition);
                                            }
                                            handler.postDelayed(this, 200);
                                        }
                                    });
                                    floatingActionButton.setImageResource(R.drawable.ic_baseline_pause_24);
                                    mediaPlayer.setOnCompletionListener(SongPlayerActivity.this);
                                }
                                mediaPlayer.start();
                            }
                        });
                    }
                };
                nextThread.start();
            }
            
            private void previousButton() {
                previousThread = new Thread() {
                    @Override
                    public void run() {
                        super.run();
                        previous.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if (mediaPlayer.isPlaying()) {
                                    mediaPlayer.stop();
                                    mediaPlayer.release();
                                    if(shuffleBoolean && !repeatBoolean)
                                        position = random(songList.size()-1);
                                    else if (!shuffleBoolean && !repeatBoolean)
                                        position--;
                                    if (position < 0)
                                        position = 0;
                                    mediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.parse(songList.get(position).path));
                                    metaDataRetriever(Uri.parse(songList.get(position).path));
                                    seekBar.setMax(mediaPlayer.getDuration() / 1000);
                                    SongPlayerActivity.this.runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {
                                            if (mediaPlayer != null) {
                                                int currentPosition = mediaPlayer.getCurrentPosition() / 1000;
                                                seekBar.setProgress(currentPosition);
                                            }
                                            handler.postDelayed(this, 200);
                                        }
                                    });
                                    mediaPlayer.setOnCompletionListener(SongPlayerActivity.this);
                                    floatingActionButton.setImageResource(R.drawable.ic_baseline_pause_24);
                                } else {
                                    mediaPlayer.stop();
                                    mediaPlayer.release();
                                    if(shuffleBoolean && !repeatBoolean)
                                        position = random(songList.size()-1);
                                    else if (!shuffleBoolean && !repeatBoolean)
                                        position--;
                                    if (position < 0)
                                        position = 0;
                                    mediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.parse(songList.get(position).path));
                                    metaDataRetriever(Uri.parse(songList.get(position).path));
                                    seekBar.setMax(mediaPlayer.getDuration() / 1000);
                                    SongPlayerActivity.this.runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {
                                            if (mediaPlayer != null) {
                                                int currentPosition = mediaPlayer.getCurrentPosition() / 1000;
                                                seekBar.setProgress(currentPosition);
                                            }
                                            handler.postDelayed(this, 200);
                                        }
                                    });
                                    mediaPlayer.setOnCompletionListener(SongPlayerActivity.this);
                                    floatingActionButton.setImageResource(R.drawable.ic_baseline_pause_24);
                                }
                                mediaPlayer.start();
                            }
                        });
                    }
                };
                previousThread.start();
            }
            
            private int random(int i) {
                Random random = new Random();
                return random.nextInt(i+1);
            }
            
            public void metaDataRetriever(Uri uri) {
                MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
                mediaMetadataRetriever.setDataSource(uri.getPath());
                byte[] bytes = mediaMetadataRetriever.getEmbeddedPicture();
                final LinearLayout linearLayout = findViewById(R.id.linear_layout);
                Bitmap bitmap;
                if (bytes != null) {
                    bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                    layoutAnimation(getApplicationContext(), songImage, bitmap);
                    Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
                        @Override
                        public void onGenerated(@Nullable Palette palette) {
                            Palette.Swatch swatch = Objects.requireNonNull(palette).getDominantSwatch();
                            if (swatch != null) {
                                GradientDrawable gradientDrawable = new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, new int[]{0xff000000, swatch.getRgb()});
                                linearLayout.setBackground(gradientDrawable);
                                songName.setTextColor(swatch.getTitleTextColor());
                                albumName.setTextColor(swatch.getTitleTextColor());
                                artistName.setTextColor(swatch.getTitleTextColor());
                                durationPlayed.setTextColor(Color.WHITE);
                                totalDuration.setTextColor(Color.WHITE);
                                floatingActionButton.setImageResource(R.drawable.ic_baseline_pause_24);
                                floatingActionButton.getBackground().setTint(Color.WHITE);
                                next.setImageResource(R.drawable.ic_baseline_skip_next_white_24);
                                previous.setImageResource(R.drawable.ic_baseline_skip_previous_white_24);
                                seekBar.getThumb().setTint(Color.WHITE);
                            }
                        }
                    });
                } else {
                    layoutAnimation(getApplicationContext(), songImage, null);
                    linearLayout.setBackgroundResource(R.drawable.gradient_brown);
                    songName.setTextColor(Color.DKGRAY);
                    albumName.setTextColor(Color.DKGRAY);
                    artistName.setTextColor(Color.DKGRAY);
                    floatingActionButton.setImageResource(R.drawable.ic_baseline_pause_24);
                    next.setImageResource(R.drawable.ic_baseline_skip_next_24);
                    previous.setImageResource(R.drawable.ic_baseline_skip_previous_24);
                    seekBar.getThumb().setTint(getResources().getColor(R.color.colorYellow));
                    durationPlayed.setTextColor(getResources().getColor(R.color.colorYellow));
                    totalDuration.setTextColor(getResources().getColor(R.color.colorYellow));
                }
                songName.setText(songList.get(position).songName);
                albumName.setText(songList.get(position).albumName);
                artistName.setText(songList.get(position).artistName);
                totalDuration.setText(Song.durationConversion(songList.get(position).songDuration));
            }
            
            public void playMusic() {
                if (songList != null) {
                    floatingActionButton.setImageResource(R.drawable.ic_baseline_pause_24);
                    uri = Uri.parse(songList.get(position).path);
                }
                if (mediaPlayer != null) {
                    mediaPlayer.stop();
                    mediaPlayer.release();
                }
                mediaPlayer = MediaPlayer.create(getApplicationContext(), uri);
                mediaPlayer.start();
            
                metaDataRetriever(uri);
                seekBar.setMax(mediaPlayer.getDuration() / 1000);
            }
            
            public void layoutAnimation(final Context context, final ImageView imageView, final Bitmap bitmap) {
                final Animation animationIn = AnimationUtils.loadAnimation(context, android.R.anim.fade_in);
                Animation animationOut = AnimationUtils.loadAnimation(context, android.R.anim.fade_out);
                if (bitmap != null)
                    animationOut.setAnimationListener(new Animation.AnimationListener() {
                        @Override
                        public void onAnimationStart(Animation animation) {
            
                        }
            
                        @Override
                        public void onAnimationEnd(Animation animation) {
                            Glide.with(context).load(bitmap).into(imageView);
                            animationIn.setAnimationListener(new Animation.AnimationListener() {
                                @Override
                                public void onAnimationStart(Animation animation) {
            
                                }
            
                                @Override
                                public void onAnimationEnd(Animation animation) {
            
                                }
            
                                @Override
                                public void onAnimationRepeat(Animation animation) {
            
                                }
                            });
                            imageView.startAnimation(animationIn);
                        }
            
                        @Override
                        public void onAnimationRepeat(Animation animation) {
            
                        }
                    });
                else
                    animationOut.setAnimationListener(new Animation.AnimationListener() {
                        @Override
                        public void onAnimationStart(Animation animation) {
            
                        }
            
                        @Override
                        public void onAnimationEnd(Animation animation) {
                            Glide.with(context).load(R.drawable.album_cover).into(imageView);
                            animationIn.setAnimationListener(new Animation.AnimationListener() {
                                @Override
                                public void onAnimationStart(Animation animation) {
            
                                }
            
                                @Override
                                public void onAnimationEnd(Animation animation) {
            
                                }
            
                                @Override
                                public void onAnimationRepeat(Animation animation) {
            
                                }
                            });
                            imageView.startAnimation(animationIn);
                        }
            
                        @Override
                        public void onAnimationRepeat(Animation animation) {
            
                        }
                    });
                imageView.startAnimation(animationOut);
            }
            
            @Override
            protected void onResume() {
                super.onResume();
                playPauseButton();
                nextButton();
                previousButton();
            }
            
            @Override
            public void onCompletion(MediaPlayer mp) {
                nextButton();
                position++;
                if(position >= songList.size())
                    position = 0;
                if (mediaPlayer != null) {
                    mediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.parse(songList.get(position).path));
                    seekBar.setMax(mediaPlayer.getDuration() / 1000);
                    metaDataRetriever(Uri.parse(songList.get(position).path));
                    mediaPlayer.start();
                    mediaPlayer.setOnCompletionListener(this);
                }
            }
            }
            
            ...

            ANSWER

            Answered 2021-Feb-28 at 05:38

            The solution is to call next.performClick() in onCompltition() and remove all the other lines. I don't know the reason that the firs way don't work but i thought of it as i need to call onClickListener() without clicking the button.

            Source https://stackoverflow.com/questions/66349863

            QUESTION

            js: field seems to be in memory twice after removing and re-adding to the DOM
            Asked 2021-Feb-14 at 18:42

            I have an element in html, inside a button:

            HTML:

            ...

            ANSWER

            Answered 2021-Feb-14 at 18:42

            This is undoubtedly related to the fact that interactive content is not allowed within a element. Although the browser allows this and does what it can to make the flawed encapsulation work, using HTML inappropriately has consequences. Reference

            Source https://stackoverflow.com/questions/66197776

            QUESTION

            How do i make auido player play the next song after song ended?
            Asked 2021-Feb-02 at 15:51

            Im trying to implement an autoplay function into this audio player but I cant get it to work, I have been trying for ages and I feel like I wanna give up. Any help would be helpful. I am pretty new to learning javascript and hope that I will find my answer here. I somehow got it working once but then i forgot to actually save the code and it all went away and now im questioning my life's choices

            ...

            ANSWER

            Answered 2021-Feb-02 at 15:51

            Alright, finally I have an answer. Its only two audios played one after another, and you can keep on add more and more. The code is below.

            Source https://stackoverflow.com/questions/65984492

            QUESTION

            Tooltips work in Firefox but not in Chrome
            Asked 2020-Nov-24 at 22:22

            In my web-app, I implemented some tooltips on buttons with images. In Firefox, they work as expected, that is, they appear right below the button when you hover over that button. However, in Chrome, they appear far left of the button.

            CSS:

            ...

            ANSWER

            Answered 2020-Nov-24 at 22:20

            You need to set position:relative in or in

            Source https://stackoverflow.com/questions/64995585

            QUESTION

            How can I get access to ViewController from MPNowPlayingInfoCenter
            Asked 2020-Aug-01 at 12:24

            I'm working on an audio player and came across this situation: I have a TrackDetailView that opens to play a track when I click on a TableView cell. Also I have implemented background playback and MPNowPlayingInfoCenter. When I press Pause or Play button in MPNowPlayingInfoCenter, I want the button image to change on my TrackDetailView as well, but I just can't do it. I will be glad for any help. Important note(!) TrackDetailView and MPNowPlayingInfoCenter are in different classes. When I put them in one class everything works without problems. My code:

            ...

            ANSWER

            Answered 2020-Aug-01 at 12:24

            You need to make sure that for this instance

            Source https://stackoverflow.com/questions/63204559

            QUESTION

            Labels displaying countdown sometimes out of sync after pausing. Rounding errors?
            Asked 2020-Jun-09 at 22:52

            I have an app that does a countdown with a Timer. The countdown tracks multiple steps (all at the same intervals) as well as the total time left, and updates 2 separate UILabels accordingly. Occasionally, the labels will be out of sync.

            I can't say for sure, but I think it might be only happening when I pause the countdown sometimes, and usually on steps later than the first step. It's most apparent on the last step when the two labels should be displaying the same exact thing, but will sometimes be 1 second off.

            The other tricky thing is that sometimes pausing and resuming after the time has gone out of sync will get it back in sync.

            My guess is I'm getting something weird happening in the pause code and/or the moving between steps, or maybe the calculating and formatting of TimeIntervals. Also I'm using rounded() on the calculated TimeIntervals because I noticed only updating the timer every 1s the labels would freeze and skip seconds a lot. But I'm unsure if that's the best way to solve this problem.

            Here's the relevant code. (still need to work on refactoring but hopefully it's easy to follow, I'm still a beginner)

            ...

            ANSWER

            Answered 2020-Jun-09 at 22:52

            Fixed my issue and posting here for posterity. I ended up making my totalTimeLeft and currentInterval global properties. Then, on pause and resume, instead of tracking the paused time and adding it to endTime, I just used the totalTimeLeft and currentInterval values that are still stored from the last Timer firing and doing endTime = Date().addingTimeInterval(totalTimeLeft) and the same with the interval time. This got rid of the paused time adding weird amounts that would mess up the rounding.

            Source https://stackoverflow.com/questions/62252589

            QUESTION

            Adding button programmatically swift
            Asked 2020-Jun-06 at 16:30

            I am trying to add button programmatically, I created button, it shows in app, but problem that when I write .addTarget in #selector occurs error (it builds successfully, but action do not work) I tried to write playAction() and playAction(sender:) and playAction. None of them work.

            ...

            ANSWER

            Answered 2020-Jun-04 at 18:38

            Your function needs to have the @objc attribute. This allows it to be looked-up as a selector.

            Source https://stackoverflow.com/questions/62201885

            QUESTION

            Flutter : Assets Audio Player
            Asked 2020-May-12 at 11:48

            I have problem with assest audio player package when I try to play two songs inside one page both are playing ! The way I want when I press first button,first song play and when I press second button the first song stop and the second song start playing .

            I used this code but it doesn't work

            HomePage

            ...

            ANSWER

            Answered 2020-May-12 at 11:48

            My problem solved by change

            final assetsAudioPlayer = AssetsAudioPlayer();

            to

            final assetsAudioPlayer = AssetsAudioPlayer.withId("0");

            Source https://stackoverflow.com/questions/61717715

            Community Discussions, Code Snippets contain sources that include Stack Exchange Network

            Vulnerabilities

            No vulnerabilities reported

            Install PlayPauseButton

            You can download it from GitHub.

            Support

            For any new features, suggestions and bugs create an issue on GitHub. If you have any questions check and ask questions on community page Stack Overflow .
            Find more information at:

            Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items

            Find more libraries
            CLONE
          • HTTPS

            https://github.com/KelvinJin/PlayPauseButton.git

          • CLI

            gh repo clone KelvinJin/PlayPauseButton

          • sshUrl

            git@github.com:KelvinJin/PlayPauseButton.git

          • Stay Updated

            Subscribe to our newsletter for trending solutions and developer bootcamps

            Agree to Sign up and Terms & Conditions

            Share this Page

            share link

            Explore Related Topics

            Consider Popular iOS Libraries

            swift

            by apple

            ionic-framework

            by ionic-team

            awesome-ios

            by vsouza

            fastlane

            by fastlane

            glide

            by bumptech

            Try Top Libraries by KelvinJin

            iSwift

            by KelvinJinSwift

            DynamicFontSizeHelper

            by KelvinJinSwift

            iSwift.Python

            by KelvinJinSwift

            PlaygroundExporter

            by KelvinJinSwift